2012-03-12 136 views
0

我正在使用GROUP BY來爲所有共享相同'cat_no'值的條目選擇一行,因爲GROUP BY檢索一個隨機行,我需要使用ORDER BY ABS(track)來確保它選擇數據庫中的軌道號爲「1」的行。然而,一旦我有這樣的結果集,我需要在'數據庫'中的'日期'的另一個字段實際上有最終的順序,但我似乎無法排序兩次。MYSQL排序GROUP BY

SELECT * FROM cds 
WHERE genre='rock' 
GROUP BY cat_no 
ORDER BY date DESC,ABS(track) DESC 
LIMIT 0,3 

SQL是唯一by子句紀念第一份訂單,在這種情況下,「日期」,如果我換他們身邊,然後「軌道」,而「日期」忽略

genre cat_no track date 
rock 001  1  09323123 
rock 001  2  09323123 
rock 001  bundle 09323123 
rock 002  1  09323123 
rock 002  2  09323123 
rock 002  bundle 09323123 
rock 003  1  09323123 
rock 003  2  09323123 
rock 003  bundle 09323123 

回答

1

如果你總是想跟蹤1,你不需要組:

SELECT * FROM cds 
WHERE genre = 'rock' AND track = 1 
ORDER BY date DESC 
LIMIT 0, 3 

如果你想第一軌道(不一定跟蹤1 ),那麼你需要一個子查詢:

SELECT * FROM cds c 
WHERE genre = 'rock' 
AND track = (
    SELECT MIN(track) FROM cds innerq 
    WHERE innerq.cat_no = c.cat_no 
    LIMIT 1 
) 
ORDER BY date DESC 
LIMIT 0, 3 
+0

第二個是相當接近預期,我需要這樣以「捆綁」的Track項被選中,而不是音軌1音軌使用ABS(軌道訂購)不知何故。 – user1209203 2012-03-12 20:45:41

+0

Ok現在用track =(SELECT MIN(ABS(track))....非常感謝! – user1209203 2012-03-12 20:50:55

+0

其實它不是貓分組沒有,所以兩個具有相同的cat_no條目顯示 – user1209203 2012-03-12 20:57:16