开发者社区 问答 正文

每个分组里的前n条记录问题

测试数据:
8
对以上数据:
1、查询出每个分组里的年龄最大的前3条记录。即使有年龄相同的,也只返回3条记录。经过网络搜索和测试(在线测试SQL:http://sqlfiddle.com),以下查询有效(返回1条、2条、3条、4条和5条均有效):
9
2、查询出每个分组里的年龄最大的前3组人。对于
10
应该包括:Laura、Paul、Joe和Jake,不包括James。依次类推。
对这起情况,搜索了很久也没有找到答案,请求帮助。暂时以MySQL为目标数据库。
谢谢。

展开
收起
落地花开啦 2016-02-15 14:31:26 1878 分享 版权
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    `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函数。

    2019-07-17 18:43:15
    赞同 展开评论