这是我的表结构:
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:
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)。
table(file, version)
这将查询重新表述为:“从表中获取其中相应文件没有较大版本的所有行。”