Masam:
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
Maksimum datetime
değerini tutan her bir farklı home
u seçmem gerekiyor.
Sonuç şöyle olacaktır:
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
Denedim ki:
-- 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
Çalışmıyor. Veritabanında 187 satır olmasına rağmen sonuç kümesinde 130 satır var.
Sonuç, home
öğesinin bazı kopyalarını içerir.
-- 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
Hayır. Tüm kayıtları veriyor.
-- 3 ..something exotic:
Çeşitli sonuçlarla.
Çok yaklaştınız! Tek yapmanız gereken hem evi hem de maksimum tarih saatini seçmek, ardından HER İKİ alanda topten
tablosuna geri katılmaktır:
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
Bu, her home
için eşit DATETIME
'lere sahip iki veya daha fazla satırınız olsa bile çalışacaktır:
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
Sanırım bu size istediğiniz sonucu verecektir:
SELECT home, MAX(datetime)
FROM my_table
GROUP BY home
AMA başka sütunlara da ihtiyacınız varsa, orijinal tablo ile birleştirme yapmanız yeterlidir (Michael La Voie
yanıtını kontrol edin)
Saygılarımla.