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 № 1ponieważ 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ę