Ограничить результаты SQL одним результатом для каждого поискового ключа, используя "in"

У меня есть таблица истории, которую я хотел бы использовать, чтобы найти последнего пользователя, в котором обновлены определенные элементы. Вот запрос, который я имею до сих пор:

SELECT * 
  FROM  `history` 
WHERE  `pKey` 
  IN ( 13309, 13311, 13951, 14244, 1500, 15558, 15691, 15938, 9769 ) 
ORDER BY  `history`.`time` DESC 
LIMIT 0 , 30

Это возвращает несколько результатов истории для каждого ключа. Есть ли способ ограничить результаты только самой последней (основанной на времени) записью от конкретного ключа?

Так, например: сейчас у pkey 13309 возвращено несколько результатов. Запрос должен возвращать только последний результат для него. То же самое касается 13311... и т. Д.

2 ответа

Решение

Это должно сделать:

SELECT h.*
FROM `history` as h
INNER JOIN (SELECT `pkey`, MAX(`time`) as MaxTime
            FROM `history`
            WHERE `pkey` IN (13309, 13311, 13951, 14244, 1500, 
                             15558, 15691, 15938, 9769)
            GROUP BY `pkey`) as t
    ON h.`pkey` = t.`pkey`
    AND h.`time` = t.`MaxTime`

Это должно работать. Просто группируем все строки, которые имеют одинаковый ключ. Я думаю, что это будет работать. Комментарий с обратной связью.

Select * from (
SELECT * 
  FROM  `history` 
WHERE  `pKey`
  IN ( 13309, 13311, 13951, 14244, 1500, 15558, 15691, 15938, 9769 ) 
ORDER BY  `history`.`time` DESC) as t1 group by pKey
Другие вопросы по тегам