MySQL - с использованием GROUP BY и DESC - PullRequest
13 голосов
/ 05 сентября 2011

В моем запросе SQL я выбираю данные с предложениями GROUP BY и ORDER BY .Таблица имеет одинаковый numbers в нескольких строках с разным временем в каждой строке.Поэтому я думаю, что хочу применить предложение GROUP BY .

Однако в результатах вернуть самое старое время с номером, но мне нужно самое последнее время.

SELECT * FROM TABLE GROUP BY (numbers) ORDER BY time DESC

Запрос выглядит так, как если бы он сначала применял GROUP BY , а затем ORDER BY ... но результаты не работают таким образом.

Есть ли способ исправить это?

Ответы [ 5 ]

18 голосов
/ 05 сентября 2011
SELECT * 
FROM table t
WHERE time = (
    SELECT max(time)
    FROM table
    WHERE t.numbers = numbers
)
16 голосов
/ 05 сентября 2011

Обходной путь - переписать запрос как:

SELECT * FROM (SELECT * FROM table ORDER BY time DESC) AS t GROUP BY numbers;
1 голос
/ 25 сентября 2018
SELECT * FROM table
    WHERE time IN (
        SELECT MAX(time)
            FROM table
            GROUP BY numbers
    )
0 голосов
/ 05 января 2018

Согласно инструкции вы можете добавить desc в группу по списку: Пример:
сгруппировать по item1, item2 desc, item3

с или без сворачивания.

Я пробовал это, и это работает в Ubuntu версии 5.5.58. Справочная страница: https://dev.mysql.com/doc/refman/5.7/en/group-by-modifiers.html

0 голосов
/ 09 февраля 2015
SELECT * FROM TABLE GROUP BY numbers DESC;

Это даст вам последнюю запись из группы.

Спасибо

...