我有下表:
id time text otheridentifier
-------------------------------------------
1 6 apple 4
2 7 orange 4
3 8 banana 3
4 9 pear 3
5 10 grape 2
我想做的是选择3条最近的记录(按时间desc),它们的
otheridentifier
是不同的。因此,在这种情况下,结果将是id
:5、4和2。id
= 3将被跳过,因为存在具有相同otheridentifier
字段的更新记录。这是我尝试做的事情:
SELECT * FROM `table` GROUP BY (`otheridentifier`) ORDER BY `time` DESC LIMIT 3
但是,我最终得到的行
id
= 5、3和1,而不是预期的5、4、2。有人可以告诉我为什么这个查询不会返回我期望的结果吗?我尝试将ORDER BY更改为ASC,但这只是将返回的行重新排列为1、3、5。
最佳答案
它不会返回您期望的结果,因为分组是在排序之前发生的,这由子句在SQL语句中的位置反映出来。不幸的是,您将不得不变得更加幻想才能获得想要的行。尝试这个:
SELECT *
FROM `table`
WHERE `id` = (
SELECT `id`
FROM `table` as `alt`
WHERE `alt`.`otheridentifier` = `table`.`otheridentifier`
ORDER BY `time` DESC
LIMIT 1
)
ORDER BY `time` DESC
LIMIT 3