当前位置: 首页 > 面试题库 >

用“居于选择”命令选择每个组的前两个记录的最佳方法是什么?

段干靖
2023-03-14
问题内容

例如,我有下表:

id group data
1 1 aaa
2 1 aaa
3 2 aaa
4 2 aaa
5 2 aaa
6 3 aaa
7 3 aaa
8 3 aaa

通过“ SELECT”命令选择每个组的前两个记录的最佳方法是什么?如果没有好的方法,您建议使用什么例程?(在PHP中)

(模型结果)

1 1 aaa
2 1 aaa
3 2 aaa
4 2 aaa
6 3 aaa
7 3 aaa

我知道在子查询中通过a.id> = b.id进行交叉联接是可行的,但是我正在寻找一种可扩展性更高的解决方案,该解决方案可以应用于具有数百万条记录的表。谢谢


问题答案:
select a.*
from Tablename a
where 
(
   select count(*) 
   from Tablename as b
   where a.group = b.group and a.id >= b.id
) <= 2
  • SQLFiddle演示


 类似资料:
  • 问题内容: 我试图从看起来像这样的数据库表结果中选择前2条记录 我试过这个查询 但是有些主题,例如失踪的地方,我什至尝试了以下链接的建议 如何选择每个组的前N行? 但是我为每个受检者得到两个以上 我究竟做错了什么? 问题答案: 您可以使用相关的子查询: 该查询通过串联三列来构造单列主键。如果您有真正的主键(如),则可以用代替。 SQL Fiddle中的示例。

  • 问题内容: 嗨,我是Spark SQL的新手。我有一个这样的数据框。 我想为每个列表器在Spark sql中选择前10个时间戳值。 我尝试了以下查询。它引发错误。 我想为每个列表器选择我需要采用的前10个时间戳值。任何帮助将不胜感激。 问题答案: 这不行吗? 编辑: 哦,我明白了。您要:

  • 如何选择每个学生最喜欢的学期链接图片。 http://i.stack.imgur.com/Ka97X.jpg

  • 我需要从数据库中选择一百个参数,然后在d to返回它来创建一个excel文件。 我使用的是spring数据,我认为有两种解决方案: > 使用multiselect方法,然后在DTO中定义一个包含所有参数的构造函数(参数数大于100) 使用multiselect方法并将数组(Object[])映射到DTO= 请问你还有其他的想法吗? 谢谢。

  • 问题内容: 我有一个得分表,其中有球员得分,并且我想为每个得分最高的球员选择唯一的记录。 表格如下: 预期结果: 我可以这样用纯SQL来实现: 您能告诉我如何使用查询dsl实现相同的查询吗?我找到了一些使用JPASubQuery的解决方案,但该类对我不起作用(我的IDE无法解析该类)。我正在使用querydsl4.x。先感谢您。 问题答案: 已在querydsl 4中删除。请改为使用。您的子句应如

  • 问题内容: 是否有更好的方法从MySQL表中获取多个“前X个”结果?当不同的 foo 的数量很少时,我可以通过联合轻松地完成此操作: 我显然可以继续为foo的每个值添加联合。但是,当foo有500多个不同的值并且我需要每个值的前X个时,这是不切实际的。 问题答案: 这种查询可以用“每组最大n”来表述,您希望每个“组”的前10个得分为“ foo”。 我建议您看一下这个链接,它很好地处理了这个问题,从