小编典典

SQL:筛选具有最大值的行

sql

这是我的表结构:

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兼容。


阅读 497

收藏
2021-03-10

共1个答案

小编典典

一种有效的方法通常是使用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)

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

2021-03-10