Vairāk
Kā SQL programmā IZVĒLĪT rindas ar MAX(Kolonnas vērtība), DISTINCT pēc citas kolonnas?
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.
724
3
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:Tas darbosies pat tad, ja katrai
mājvietai
ir divas vai vairākas rindas ar vienādiemDATETIME
:Domāju, ka tas ļaus sasniegt vēlamo rezultātu:
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.