t-sqlgroup-by

SQL Retrieving data from last record with Group BY


Example od data:

Id   Name    Value
------------------
1     A       1
2     A       2
3     B       3
4     B       2
5     B       1

When I use Group BY

select Name, Max(Value)
from TableName
GROUP BY Name

Recived data:

A 2
B 3

I would read Value from last row, it should looks like belov:

A 2
B 1

Solution

  • One canonical approach uses the ROW_NUMBER() window function:

    WITH cte AS (
        SELECT *, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Id DESC) rn
        FROM TableName
    )
    
    SELECT Name, Value
    FROM cte
    WHERE rn = 1
    ORDER BY Name;