Mysql
 sql >> Base de données >  >> RDS >> Mysql

Traduire la jointure MySQL en syntaxe SQL Server ?

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

C'est ainsi que vous devez le faire dans SQL Server. Cela rend "dernier/premier/max/min/plus grand-n-par groupe" simple comme bonjour.

PARTITION BY le mot-clé ici est égal à votre GROUP BY et l'instruction ORDER BY ici se traduirait par le MAX fonction d'agrégation que vous avez utilisée dans MySQL

L'utiliser vous permettrait de faire des choses fantaisistes comme :

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