Как получить последние 3 различных идентификатора из таблицы MySQL - PullRequest
3 голосов
/ 28 января 2011

Database

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

Iне могу обойти меня.У меня есть доступ к предыдущему идентификатору, который был.Итак, вы видите, что для идентификатора 9 он говорит, что 17879 был последним в идентификаторе 7. Этот идентификатор 8 был последним в идентификаторе 5.

Если бы кто-нибудь мог помочь мне написать запрос, который был бы великолепен.Я также использую Java для доступа к базе данных, поэтому он не должен быть просто в MySQL.Большое спасибо.

1 Ответ

5 голосов
/ 28 января 2011
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.Это необходимо для эффективного использования индекса.

...