Retrieving last record in each group from database – SQL Server 2005/2008

In SQL Server, the most performant solution is often a correlated subquery:

select t.*
from t
where t.lastupdate = (select max(t2.lastupdate)
                      from t t2
                      where t2.computername = t.computername
                     );

In particular, this can take advantage of an index on (computername, lastupdate). Conceptually, the reason this is faster than row_number() is because this query simply filters out the rows that don’t match. The row_number() version needs to attach to the row number to all rows, before it filters — that is more data processing.

Leave a Comment