,提供了此示例以检索一组参数的最后一条记录(以下示例为计算机名中的每个值检索最新更新):
select t.* from t where t.lastupdate = (select max(t2.lastupdate) from t t2 where t2.computername = t.computername );
但是,在我的情况下,“ lastupdate”不是唯一的(某些更新成批出现并且具有相同的lastupdate值,并且如果两个“ computername”更新同时出现在同一批中,则您将获得“ computername + lastupdate”的非唯一输出”)。假设我还有一个字段“ rowId”只是自动递增的。缓解措施是在查询中包括max(’rowId’)字段的另一个条件。
注意:虽然该示例使用了特定于时间的名称“ lastupdate”,但实际的选择标准可能与时间完全不相关。
因此,我想问一问,根据“组定义参数”(在上述情况下为“计算机名”)和最大rowId来选择每个组中的最后一条记录的 性能最高的 查询是什么?
如果您没有唯一性,那么row_number()会更简单:
row_number()
select t.* from (select t.*, row_number() over (partition by computername order by lastupdate, rowid desc) as seqnum from t ) t where seqnum = 1;
使用正确的索引,相关的子查询通常会更快。但是,性能差异不是很大。