测试数据:
对以上数据:
1、查询出每个分组里的年龄最大的前3条记录。即使有年龄相同的,也只返回3条记录。经过网络搜索和测试(在线测试SQL:http://sqlfiddle.com),以下查询有效(返回1条、2条、3条、4条和5条均有效):
2、查询出每个分组里的年龄最大的前3组人。对于
应该包括:Laura、Paul、Joe和Jake,不包括James。依次类推。
对这起情况,搜索了很久也没有找到答案,请求帮助。暂时以MySQL为目标数据库。
谢谢。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
`SELECT person, groupname, age
FROM
(SELECT person, groupname, age,
@rn := (case when @prev != groupname then 1
when (@prev=groupname && @prevAge=age)
then @rn else @rn+1 end) AS rn,
@prev := groupname,
@prevAge := age
FROM foo
ORDER BY groupname, age DESC
) ranked
WHERE rn <= 3;`
关键在于那个case函数。