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