Mana galds ir:
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
Man ir jāizvēlas katrs atsevišķs home
, kurā ir datetime
maksimālā vērtība.
Rezultāts būtu šāds:
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
Esmu mēģinājis:
-- 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
Nestrādā. Rezultātu kopā ir 130 rindas, lai gan datu bāzē ir 187 rindas.
Rezultātā ir daži home
dublikāti.
-- 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
Nē. Tiek sniegti visi ieraksti.
-- 3 ..something exotic:
Ar dažādiem rezultātiem.
Jūs esat tik tuvu! Viss, kas jums jādara, ir jāizvēlas abas mājas un tās maksimālais datuma laiks, pēc tam pievienojiet atpakaļ topten
tabulai abus laukus:
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
Tas darbosies pat tad, ja katrai mājvietai
ir divas vai vairākas rindas ar vienādiem 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
Domāju, ka tas ļaus sasniegt vēlamo rezultātu:
SELECT home, MAX(datetime)
FROM my_table
GROUP BY home
BUT, ja jums nepieciešami arī citi kolonnas, vienkārši izveidojiet savienojumu ar sākotnējo tabulu (skatiet Michael La Voie
atbildi)
Ar vislabākajiem sveicieniem.