MySQL - группировка по заказу DESC - PullRequest
5 голосов
/ 14 января 2011

таблица: uuid, версия, дата и время

версия не уникальна, но идея состоит в том, чтобы извлекать только строки с самой последней датой / временем для данного uuid

SELECT * FROM table WHERE uuid='bla' GROUP BY version ORDER BY datetime desc

... конечно же получает результаты datetime asc - есть ли способ "предварительно упорядочить" группу с помощью desc, чтобы выбиралась только последняя версия?

Ответы [ 3 ]

21 голосов
/ 14 января 2011

, поскольку в таблице есть только эти 3 поля, и вы фильтруете по uid, вы можете просто использовать MAX без JOIN:

SELECT version, MAX(datetime) Maxdatetime
FROM table
WHERE uuid='bla'
GROUP BY version

Однако, если в таблице было больше полей или вы не фильтруете по uid - сначала нужно получить МАКСИМАЛЬНОЕ время / дату для каждой версии, а затем выбрать строку:

SELECT t.uuid, t.version, t.datetime 
FROM table t JOIN (
    SELECT version, MAX(datetime) Maxdatetime
    FROM table
    WHERE uuid='bla'
    GROUP BY version
) r ON t.version = r.version AND t.datetime = r.Maxdatetime
WHERE t.uuid='bla'
ORDER BY t.datetime desc
4 голосов
/ 07 сентября 2013
SELECT * FROM 
(SELECT * FROM table WHERE uuid='bla' ORDER BY datetime desc) table 
GROUP BY version;
2 голосов
/ 09 ноября 2014

Для меня есть лучший способ, вы можете добавить desc в группу:

ВЫБРАТЬ * ИЗ таблицы ГДЕ uuid = 'bla' GROUP BY version desc

почему это работает, потому что мои идентификаторы генерируются, и поэтому всегда самый последний идентификатор означает самое позднее datetime

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...