SQL: Filter rows with max value SQL: Filter rows with max value sqlite sqlite

SQL: Filter rows with max value


An efficient way to do this is often to use not exists:

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

This query can take advantage of an index on table(file, version).

This rephrases the query to be: "Get me all rows from the table where the corresponding file has no larger version."


In SQLite 3.7.11 or later, when you use MAX, the other values are guaranteed to come from the row with the largest value:

SELECT File,       MAX(Version) AS Version,       FunctionFROM MyTableGROUP BY File


Note that this will return multiple rows per file if the overall latest version for a file exists for different functions. i.e. if your example above had an additional row (1,3,2) this would return 2 rows for file 1.

select    t1.file,    t1.version,    t1.functionfrom     mytable t1join (    select         t2.file,        max(t2.version) max_version            from  mytable t2    group by t2.file) t3 join t1.file = t3.file and t1.version = t3.max_version