2011-01-28 81 views
3

Database如何從mysql表中獲得最後3個不同的ID

好吧,所以基本上我有我的數據庫表。第一列是id。第二個是pkg_id。第三個不重要,第四個是pkg_id所在的前一個ID。我需要從表中取出最後3個pkg_id。所以基本上我需要拉最後3 17879 pkg_id和最後3 3075.所以在這個例子中,我需要拉ID爲979,679和ID爲8,5,3爲3075.

我可以'不要讓我的頭靠近它。我確實可以訪問它以前的ID。所以你看到,對於ID 9它說,17879是最後在ID 7中。該ID 8是ID 5中的最後一個。

如果有人可以幫我寫一個很棒的查詢。我也使用Java進行數據庫訪問,所以它不一定只在mysql中。非常感謝。

回答

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 

mytable (pkg_id, id)上創建一個索引,以便快速工作。

請注意此條件:m.pkg_id <= q.pkg_id AND m.pkg_id >= q.pkg_id而不僅僅是m.pkg_id = q.pkg_id。這是索引有效使用所必需的。

+0

神聖的怪物廢話。你如何在這個世界上提出這個問題?你的SQL功能很強大。驚人!!非常感謝!! – 2011-01-28 16:49:28

相關問題