MYSQL订购GROUP BY

时间:2012-03-12 19:14:34

标签: mysql

我使用GROUP BY只为共享相同'cat_no'值的所有条目选择一行,因为GROUP BY检索我需要使用的随机行ORDER BY ABS(track)以确保它选择的行是数据库中的轨道号“1”。但是,一旦我有了这组结果,我需要在数据库中的'date'实际上按照'date'的最后顺序,但我似乎无法订购两次。

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

Sql只尊重第一个order by子句,在本例中为'date',如果我将它们交换掉,则使用'track'并忽略'date'

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 个答案:

答案 0 :(得分: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