SQL:筛选具有最大值的行

SQL:筛选具有最大值的行,sql,sqlite,greatest-n-per-group,Sql,Sqlite,Greatest N Per Group,这是我的表格结构: File | Version | Function 1 | 1 | 1 1 | 2 | 1 1 | 3 | 1 1 | 2 | 2 2 | 1 | 4 3 | 2 | 5 我只需要它返回这些行 1 |

这是我的表格结构:

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
...
我已经看过了,但它返回了最新的唯一函数ID


查询需要与sqlite3兼容。

请注意,如果一个文件的总体最新版本针对不同的函数存在,则每个文件将返回多行。i、 e.如果上面的示例有一个额外的第1、3、2行,那么将为文件1返回2行


执行此操作的有效方法通常是使用“不存在”:

此查询可以利用tablefile上的索引version


这将查询改为:从表中获取对应文件没有更大版本的所有行。

在SQLite 3.7.11或更高版本中,使用MAX时,其他值保证来自具有最大值的行:

SELECT File,
       MAX(Version) AS Version,
       Function
FROM MyTable
GROUP BY File

工作很出色,谢谢你。你能不能看看我的下一个问题,因为你解决了其中的四分之一?
select t.*
from table t
where not exists (select 1
                  from table t2
                  where t2.file = t.file and t2.Version > t.version
                 );
SELECT File,
       MAX(Version) AS Version,
       Function
FROM MyTable
GROUP BY File