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.
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:
SELECT tt.*
FROM topten tt
INNER JOIN
(SELECT home, MAX(datetime) AS MaxDateTime
FROM topten
GROUP BY home) groupedtt
ON tt.home = groupedtt.home
AND tt.datetime = groupedtt.MaxDateTime
See töötab isegi siis, kui teil on iga "kodu" jaoks kaks või enam rida, millel on võrdne "DATETIME":
SELECT id, home, datetime, player, resource
FROM (
SELECT (
SELECT id
FROM topten ti
WHERE ti.home = t1.home
ORDER BY
ti.datetime DESC
LIMIT 1
) lid
FROM (
SELECT DISTINCT home
FROM topten
) t1
) ro, topten t2
WHERE t2.id = ro.lid
Ma arvan, et see annab teile soovitud tulemuse:
SELECT home, MAX(datetime)
FROM my_table
GROUP BY home
MUT kui teil on vaja ka teisi veerge, tehke lihtsalt liitmine algse tabeliga (vaadake Michael La Voie
vastust).
Parimad tervitused.