这是一个后续问题从数据库中检索每组中的最后一条记录 - SQL Server 2005/2008 https://stackoverflow.com/questions/4751913/retrieving-last-record-in-each-group-from-database-sql-server-2005-2008
在答案中,提供此示例是为了检索一组参数的最后一条记录(下面的示例检索 computername 中每个值的最后更新):
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()
更简单:
select t.*
from (select t.*,
row_number() over (partition by computername order by lastupdate, rowid desc) as seqnum
from t
) t
where seqnum = 1;
使用正确的索引,相关子查询通常会更快。然而,性能差异并不是那么大。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)