/ / MySQL - Group by with Order by DESC - mysql, group-by

MySQL - Group by with Order by DESC - mysql, group-by

tabela: uuid, wersja, datetime

Wersja nie jest unikatowa, ale chodzi o to, aby pobrać tylko te wiersze z najnowszą datowością dla danego uuidu

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

... oczywiście dostaje wyniki datc-datetime - czy istnieje sposób na "zamówienie" grupy przez desc, tak aby została pobrana tylko najnowsza wersja?

Odpowiedzi:

21 dla odpowiedzi № 1

ponieważ tabela ma tylko te 3 pola, a filtrujesz przez UID możesz po prostu użyć MAX bez JOIN:

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

Jeśli jednak tabela zawiera więcej pól lub nie filtrujesz według uid - musisz najpierw uzyskać MAX-ową datetime dla każdej wersji, a następnie wybrać wiersz:

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 dla odpowiedzi nr 2
SELECT * FROM
(SELECT * FROM table WHERE uuid="bla" ORDER BY datetime desc) table
GROUP BY version;

2 dla odpowiedzi nr 3

Jest lepszy sposób dla mnie, możesz dodać desc grupować według:

SELECT * FROM table WHERE uuid = "bla" GROUP BY wersja desc

dlaczego działa, ponieważ moje identyfikatory są generowane i dlatego zawsze najnowszy identyfikator oznacza najnowszą datę