如果您保证具有 的行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);