Как вернуть самое последнее значение с помощью group by

#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) , чтобы это работало быстро.