数据库
首页 > 数据库> > java-如何从mysql表中获取最后3个不同的id

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

作者:互联网

好吧,基本上我有我的数据库表.第一列是ID.第二个是pkg_id.第三位并不重要,第四位是pkg_id所在的先前ID.我需要从表中拉出最后3个pkg_id.所以基本上我需要拉最后3个17879 pkg_id和最后3个3075.因此在此示例中,我需要拉ID 9、7、6表示17879,而ID 8、5、3表示3075.

我无法解决这个问题.我确实可以访问以前的ID.因此,您看到ID 9表示17879在ID 7中位于最后.ID8在ID 5中位于最后.

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

解决方法:

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

在mytable上创建一个索引(pkg_id,id),以使其快速运行.

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

标签:jdbc,greatest-n-per-group,java,mysql
来源: https://codeday.me/bug/20191023/1913870.html