I have done some seaching by can\'t seem to get the results I am looking for. Basically we have four different management systems in place throughout our company and I am in
;with cteRowNumber as (
select COMPUTERNAME, SERIALNUMBER, USERNAME, LASTIP, LASTUPDATE, SOURCE,
row_number() over(partition by COMPUTERNAME order by LASTUPDATE desc) as RowNum
from YourTable
)
select COMPUTERNAME, SERIALNUMBER, USERNAME, LASTIP, LASTUPDATE, SOURCE
from cteRowNumber
where RowNum = 1
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.