2012-03-12 80 views
0

我有下面的語句MYSQL使用秩序和GROUP BY

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

每張光盤都存在DB每個軌道行和整體另一個條目的CD,而不是一個軌道號被稱爲「捆綁'(但只有當CD有多個軌道時),上述語句將選擇三個「捆綁」條目,但我希望能夠選擇最新的3.如果我使用ABS(日期,軌道),它不會'工作。

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 
+0

您查詢期望與SELECT * FROM和GROUP BY什麼??? – rkosegi 2012-03-12 14:23:59

+1

您需要更精確地瞭解桌子的外觀和結果。 – ntziolis 2012-03-12 14:29:15

+0

我想要最新的三個捆綁到日期,或者如果沒有捆綁,然後跟蹤1. – user1209203 2012-03-12 16:25:51

回答

0

如何:

SELECT * FROM cds 
WHERE genre = 'rock' 
ORDER BY ABS(track) ASC 
LIMIT 0, 3; 

或者:

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

對不起,我應該說我需要按順序排序,因爲有時沒有捆綁條目只是一個單一的軌道'釋放' – user1209203 2012-03-12 16:25:13

+0

@ user1209203:那麼第一個查詢怎麼樣?它是做你需要的嗎?如果不是,也許更新您的問題,以包括您的預期結果。 – Travesty3 2012-03-12 16:31:50

+0

@ user1209203:或者看看[COALESCE](http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce)函數。 – Travesty3 2012-03-12 16:34:08