I know this is an old thread but the TOP 1 WITH TIES
solutions is quite nice and might be helpful to some reading through the solutions.
select top 1 with ties
DocumentID
,Status
,DateCreated
from DocumentStatusLogs
order by row_number() over (partition by DocumentID order by DateCreated desc)
The select top 1 with ties
clause tells SQL Server that you want to return the first row per group. But how does SQL Server know how to group up the data? This is where the order by row_number() over (partition by DocumentID order by DateCreated desc
comes in. The column/columns after partition by
defines how SQL Server groups up the data. Within each group, the rows will be sorted based on the order by
columns. Once sorted, the top row in each group will be returned in the query.
More about the TOP clause can be found here.