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