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中.非常感谢.
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.这是有效使用索引所必需的.
| 归档时间: |
|
| 查看次数: |
232 次 |
| 最近记录: |