max(create_date)
の行にも最大の値があることが保証されているid
場合 (サンプル データにはありますが、それがアーティファクトかどうかはわかりません)、単に選択することができますmax(id)
select t1.file_name, max(create_date), max(t1.id)
from dbo.translation_style_sheet AS t1
GROUP BY t1.file_name
それが保証されておらず、返されるid
行の値がmax(create_date)
必要な場合は、分析関数を使用できます。以下は Oracle で機能しますが、Derby のようなあまり洗練されていないデータベースでサポートされる可能性は低いです。
select t1.file_name, t1.create_date, t1.id
from (select t2.file_name,
t2.create_date,
t2.id,
rank() over (partition by t2.file_name
order by t2.create_date desc) rnk
from dbo.translation_style_sheet t2) t1
where rnk = 1
サブクエリを使用することもできます。これは移植性が高くなる可能性がありますが、分析関数アプローチよりも効率的ではありません。
select t1.file_name, t1.create_date, t1.id
from dbo.translation_style_sheet t1
where (t1.file_name, t1.create_date) in (select t2.file_name, max(t2.create_date)
from dbo.translation_style_sheet t2
group by t2.file_name);
また
select t1.file_name, t1.create_date, t1.id
from dbo.translation_style_sheet t1
where t1.create_date = (select max(t2.create_date)
from dbo.translation_style_sheet t2
where t1.file_name = t2.file_name);