WITH Data AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Date DESC) AS Row_Number,
ID,
AverageValue
FROM Table
)
SELECT * FROM Data WHERE Row_Number = 1
Dit is de manier waarop u het zou moeten doen in SQL Server. Het maakt "laatste/eerste/max/min/grootste-n-per groep" heel eenvoudig.
PARTITION BY
zoekwoord hier is gelijk aan uw GROUP BY
statement, en de ORDER BY
hier zou vertalen in de MAX
aggregatiefunctie die u gebruikte in MySQL
Als u dit gebruikt, kunt u een aantal mooie dingen doen, zoals:
WITH Data AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Date DESC) AS Row_Number,
ID,
AverageValue
FROM Table
)
SELECT Newest.ID,
Newest.AverageValue,
(Newest.AverageValue - Next_Newest.AverageValue) AS AverageValue_Change,
Newest.Date
FROM Data Newest
LEFT OUTER JOIN Data Next_Newest
ON Newest.Row_Number+1 = Next_Newest.Row_Number
AND Newest.ID = Next_Newest.ID
WHERE Newest.Row_Number=1