我使用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
答案 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