Więcej
Jak mogę wyszukać wiersze z MAX(wartość kolumny), DISTINCT przez inną kolumnę w SQL?
Mój stół to:
id home datetime player resource
---|-----|------------|--------|---------
1 | 10 | 04/03/2009 | john | 399
2 | 11 | 04/03/2009 | juliet | 244
5 | 12 | 04/03/2009 | borat | 555
3 | 10 | 03/03/2009 | john | 300
4 | 11 | 03/03/2009 | juliet | 200
6 | 12 | 03/03/2009 | borat | 500
7 | 13 | 24/12/2008 | borat | 600
8 | 13 | 01/01/2009 | borat | 700
Muszę wybrać każdy odrębny home
posiadający maksymalną wartość datetime
.
Wynikiem byłoby:
id home datetime player resource
---|-----|------------|--------|---------
1 | 10 | 04/03/2009 | john | 399
2 | 11 | 04/03/2009 | juliet | 244
5 | 12 | 04/03/2009 | borat | 555
8 | 13 | 01/01/2009 | borat | 700
Próbowałem:
-- 1 ..by the MySQL manual:
SELECT DISTINCT
home,
id,
datetime AS dt,
player,
resource
FROM topten t1
WHERE datetime = (SELECT
MAX(t2.datetime)
FROM topten t2
GROUP BY home)
GROUP BY datetime
ORDER BY datetime DESC
Nie działa. Zestaw wyników ma 130 wierszy, choć baza danych ma ich 187.
Wynik zawiera kilka duplikatów home
.
-- 2 ..join
SELECT
s1.id,
s1.home,
s1.datetime,
s1.player,
s1.resource
FROM topten s1
JOIN (SELECT
id,
MAX(datetime) AS dt
FROM topten
GROUP BY id) AS s2
ON s1.id = s2.id
ORDER BY datetime
Nope. Daje wszystkie rekordy.
-- 3 ..something exotic:
Z różnymi wynikami.
724
3
Jesteś tak blisko! Wszystko, co musisz zrobić, to wybrać OBA domy i ich maksymalny czas daty, a następnie dołączyć z powrotem do tabeli
topten
na obu polach:To będzie działać nawet jeśli masz dwa lub więcej wierszy dla każdego
home
z równymiDATETIME
's:Myślę, że to da ci pożądany rezultat:
ALE jeśli potrzebujesz również innych kolumn, po prostu wykonaj połączenie z oryginalną tabelą (sprawdź
Michael La Voie
odpowiedź)Z najlepszymi pozdrowieniami.