Использование ROW_NUMBER
в сочетании с агрегацией:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY DATE DESC) rn
FROM yourTable
)
SELECT ID, MAX(M1) AS M1, MAX(M2) AS M2
FROM cte
WHERE rn = 1
GROUP BY ID;
Номер строки позволяет ограничиться только записями для каждого ID
, имеющего самую последнюю дату года. Затем мы агрегируем, чтобы найти максимальные значения для M1
и M2
.