Môj stôl je:
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
Potrebujem vybrať každý rozdielny home
, ktorý má maximálnu hodnotu datetime
.
Výsledok by bol:
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
Vyskúšal som:
-- 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
Nefunguje. Súbor výsledkov má 130 riadkov, hoci databáza ich obsahuje 187.
Výsledok obsahuje niektoré duplikáty 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
Nie. Dáva všetky záznamy.
-- 3 ..something exotic:
S rôznymi výsledkami.
Ste tak blízko! Stačí, ak vyberiete OBOJA domova a ich maximálny čas dátumu, potom sa pripojíte späť k tabuľke topten
na OBOCH poliach:
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
Toto bude fungovať aj vtedy, ak máte dva alebo viac riadkov pre každý home
s rovnakými DATETIME
's:
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
Myslím, že to prinesie požadovaný výsledok:
SELECT home, MAX(datetime)
FROM my_table
GROUP BY home
ALEBO ak potrebujete aj iné stĺpce, stačí urobiť spojenie s pôvodnou tabuľkou (pozrite si odpoveď Michaela La Voie
)
S pozdravom.