in查询,每个查询匹配的结果集只取前几条

select a.* from table a where 4>(select count(*) from table where id=a.id and id > a.id)
age in (16,17) 
order by a.create_time desc

以上把表名替换下,然后每个查询匹配的结果集要取几条修改下,排序规则按照自己的业务需求修改下,里面最关键的sql是id > a.id,这个用来比较的字段一定要有辨识度,我之前用的是create_time,但是表里好多数据的create_time是一样的,我只想取年龄在16,17岁的最新入库的4条数据,但是结果不符合预期,就是因为create_time字段有太多一样的数据了,然后我想到id是自增的,同时不存在物理删的情况,所以完全可以使用id做对比,大的id一定是后入库的数据,哪怕此时create_time相同,取更大的id也是符合逻辑的。

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/111600588
今日推荐