如何从mysql表中获取最后3个不同的id

Dre*_*w H 3 java mysql jdbc greatest-n-per-group

数据库

好吧基本上我有我的数据库表.第一列是id.第二个是pkg_id.第3个并不重要,第4个是pkg_id所在的前一个id.我需要从表中拉出最后3个pkg_id.所以基本上我需要拉最后3个17879 pkg_id和最后3个3075.所以在这个例子中我需要拉出id 9,7,6 for 17879和id 8,5,3 for 3075.

我无法理解它.我确实可以访问以前的ID.所以你看到id为9,它表示17879是id 7的最后一个.那个id 8是id 5的最后一个.

如果有人可以帮我写一个很棒的查询.我也使用Java进行数据库访问,因此它不必只是在mysql中.非常感谢.

Qua*_*noi 5

SELECT  m.*
FROM    (
        SELECT  pkg_id,
                COALESCE(
                (
                SELECT  id
                FROM    mytable mi
                WHERE   mi.pkg_id = md.pkg_id
                ORDER BY
                        id DESC
                LIMIT 2, 1
                ), 0) AS mid
        FROM    (
                SELECT  DISTINCT pkg_id
                FROM    mytable
                ) md
        ) q
JOIN    mytable m
ON      m.pkg_id <= q.pkg_id
        AND m.pkg_id >= q.pkg_id
        AND m.id >= q.mid
Run Code Online (Sandbox Code Playgroud)

mytable (pkg_id, id)为此创建索引以快速工作.

注意这个条件:m.pkg_id <= q.pkg_id AND m.pkg_id >= q.pkg_id而不仅仅是m.pkg_id = q.pkg_id.这是有效使用索引所必需的.