Ограничить результаты 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