我有下表:
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),它们的otheridentifiers是不同的。因此,在这种情况下,结果将是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来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。