2011-01-14 21 views
5

tablosu: uuid, sürüm, datetimeMySQL - Grup Sıralama ile DESC tarafından

versiyonu benzersiz değil, ama fikir verilen bir uuid

SELECT * FROM table WHERE uuid='bla' GROUP BY version ORDER BY datetime desc

için en son datetime ile sadece satırlar getirmek için

... elbette datetime asc sonuçları alıyor - grubu en son sürüme göre getirecek şekilde "ön sipariş" etmenin bir yolu var mı?

cevap

21

tablo sadece bu 3 alan vardır ve size sadece olmadan MAX kullanabilirsiniz uid göre filtreleme yapıyorsunuz beri JOIN:

SELECT version, MAX(datetime) Maxdatetime 
FROM table 
WHERE uuid='bla' 
GROUP BY version 

Ancak, tablo daha fazla alan vardı, yoksa filtreleme değilse

SELECT t.uuid, t.version, t.datetime 
FROM table t JOIN (
    SELECT version, MAX(datetime) Maxdatetime 
    FROM table 
    WHERE uuid='bla' 
    GROUP BY version 
) r ON t.version = r.version AND t.datetime = r.Maxdatetime 
WHERE t.uuid='bla' 
ORDER BY t.datetime desc 
+0

Bazı değişikliklerle tam olarak neye ihtiyacım vardı - Teşekkürler! – mmrtnt

+0

WHERE yan tümcesinin iki kez tekrarlanması gerekli midir? – ina

+0

@ina, performans nedenlerinden dolayı evet. –

4
SELECT * FROM 
(SELECT * FROM table WHERE uuid='bla' ORDER BY datetime desc) table 
GROUP BY version; 
2

benim için daha iyi bir yolu yoktur, birekleyebilirsiniz: - uid tarafından öncelikle her sürüm için MAX datetime almak gerekir, daha sonra satırı seçin Benim id en üretilir çünkü versiyon desc TARAFINDAN uuid = 'bla' GRUP Çalışır neden

ve böylece her zaman en son id son datetime anlamına masaya GELEN

SEÇ *: göre gruplandırmak 210

+1

neden kimse görmüyor ... iş ve basit bir sorgulama: D – haidarvm

+0

Güzel, ama sadece "datetime" sırayla eklendiyse işe yarar (sıralı) –