This is my table structure:
File | Version | Function
1 | 1 | 1
1 | 2 | 1
1 | 3 | 1
1
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.function
from
mytable t1
join (
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