#mysql
#mysql
Вопрос:
У меня есть этот запрос :
SELECT history.trackid, tracklist.artist, tracklist.event, tracklist.data, history.date
FROM history JOIN tracklist ON history.trackid=tracklist.trackid
GROUP BY trackid
ORDER BY history.date DESC
но я хотел бы вернуть самое последнее trackid
(по date
) при группировании history
.
Пробовал с этим GROUP BY
и ORDER BY DESC
, но не является самым последним. Где я ошибаюсь?
Ответ №1:
Причина, по которой не выполняется сортировка по самому последнему, заключается в том, что GROUP BY
создается совокупный результат. Вы могли бы попробовать:
SELECT h.trackid, t.artist, t.event, t.data
FROM history AS h
JOIN tracklist AS t
ON h.trackid = t.trackid
GROUP BY h.trackid
ORDER BY MAX(h.date) DESC
Поскольку вы уже агрегируете результаты, MAX(history.date)
следует возвращать максимальную (или самую последнюю) дату для каждой группы.
Ответ №2:
Предполагая, что id
это PRIMARY KEY
on history
:
SELECT t.trackid, t.artist, t.event, t.data, h.date
FROM tracklist t
LEFT JOIN
history h
ON h.id =
(
SELECT hi.id
FROM history
WHERE hi.trackid = t.trackid
ORDER BY
hi.trackid DESC, hi.date DESC, hi.id DESC
LIMIT 1
)
Создайте индекс на history (trackid, date, id)
, чтобы это работало быстро.