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

SQL:筛选具有最大值的行

东门清夷
2023-03-14
问题内容

这是我的表结构:

File    |   Version     |   Function
1       |   1           |   1
1       |   2           |   1
1       |   3           |   1
1       |   2           |   2

2       |   1           |   4
3       |   2           |   5

我需要它仅返回这些行

1       |   3           |   1
2       |   1           |   4
3       |   2           |   5

意思是我只想要每个文件具有最新版本的功能。

我不想要下面的结果,即不是最新版本的唯一函数ID

1       |   3           |   1
1       |   2           |   2
...

我看过如何通过SQL中的另一列来选择具有MAX(列值),DISTINCT的行?,但会返回最新的唯一函数ID。

该查询必须与sqlite3兼容。


问题答案:

一种有效的方法通常是使用not exists

select t.*
from table t
where not exists (select 1
                  from table t2
                  where t2.file = t.file and t2.Version > t.version
                 );

此查询可以利用上的索引table(file, version)

这将查询重新表述为:“从表中获取其中相应文件没有较大版本的所有行。”



 类似资料:
  • 问题内容: 想要改善这篇文章吗? 提供此问题的详细答案,包括引文和为什么答案正确的解释。答案不够详细的答案可能会被编辑或删除。 这个问题已经在这里有了答案 : 检索每个组中的最后一个记录-MySQL (27个答案) 去年关闭。 我有此表用于文档(此处为简化版): 如何为每个ID选择一行,而仅选择最大转速? 根据上述数据,结果应包含两行:和。我正在使用 MySQL 。 目前,我在循环中使用检查来检测

  • 问题内容: 我试图一次从一张桌子上得到2行。上周的最小日期时间(今天-7)和最晚的日期(今天)的一个。 我的桌子: 我可以通过以下方式选择上周的数据: 但我只想要第1行和第125行,因为这些是用于计算的行。所以我的问题是: 如何从上一个查询的结果中选择2行(带有MIN和MAX日期)? 问题答案: 您可以使用此: 编辑: 由于两台计算机完全有可能具有相同的值,因此应更新查询以在子句中也包含过滤器。我

  • 在oracle DB中检索具有大组最大值的行时遇到问题。 我的桌子看起来是这样的: id,col1,col2,col3,col4,col5,date_col 谢谢你的提示! 干杯

  • 问题内容: 我有一张表: 我需要选择具有最大更新值的id和val。因此,对于此表,结果应为: 问题答案: 这需要在与主表连接的子查询中进行汇总。

  • 问题内容: 我已经看到了很多解决此类问题的解决方案尤其是此SQL仅选择在Column上具有Max Value的行,但是似乎没有一个合适的解决方案: 我有以下表格布局,即附件的版本控制,这些附件绑定到实体: 输出应该是最大版本号,按group_id和Entity_id分组,如果有帮助,我只需要一个单个entity_id的列表即可: 我想出的是这种自我加入: 但是,只有在不同的实体不共享相同的组号的情

  • 我在让范围过滤器更具动态性方面遇到了问题。 过滤代码: 而不是硬编码的最小值0和最大值100,我想得到字段verkoopprijs的最小值和最大值。 搜索结果如下所示: 然而我不知道如何得到最小值和最大值。