2012-03-12 38 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