2011-01-28 3 views
3

DatabaseКак получить последние 3 различных идентификаторов из таблицы тузд

Ok поэтому в основном у меня есть таблица базы данных. Первый столбец - это идентификатор. Второй - pkg_id. Третий не важен, а четвертый - предыдущий идентификатор, в котором находился pkg_id. Мне нужно вытащить последние 3 pkg_id из таблицы. Поэтому в основном мне нужно вытащить последние 3 17879 pkg_id и последние 3 3075. Таким образом, в этом примере мне нужно тянуть id 9, 7, 6 для 17879 и id 8, 5, 3 для 3075.

Я могу ' Я обнимаю его. У меня есть доступ к предыдущему идентификатору, который был. Итак, вы видите, что для 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-кунг-фу силен. Удивительно!! Огромное спасибо!! –

Смежные вопросы