Rohkem
Kuidas ma saan SELECT ridade MAX(Column väärtus), DISTINCT teise veeru SQL?
Minu tabel on:
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
Mul on vaja valida kõik erinevad kodu
, mis sisaldavad maksimaalset väärtust kuupäeva
.
Tulemus oleks:
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
Mina olen proovinud:
-- 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
Ei tööta. Tulemuste komplektis on 130 rida, kuigi andmebaasis on 187 rida.
Tulemus sisaldab mõningaid duplikaate 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
Ei. Annab kõik kirjed.
-- 3 ..something exotic:
Erinevate tulemustega.
724
3
Sa oled nii lähedal! Kõik, mida sa pead tegema, on valida KÕIK kodu- ja selle maksimaalse kuupäeva aeg, seejärel liita tagasi tabelisse
topten
KÕIK väljad:See töötab isegi siis, kui teil on iga "kodu" jaoks kaks või enam rida, millel on võrdne "DATETIME":
Ma arvan, et see annab teile soovitud tulemuse:
MUT kui teil on vaja ka teisi veerge, tehke lihtsalt liitmine algse tabeliga (vaadake
Michael La Voie
vastust).Parimad tervitused.