sql >> Database >  >> RDS >> Mysql

MySQL-join vertalen naar SQL Server-syntaxis?

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


  1. SQLite Like()-functie met voorbeelden

  2. Selecteer bovenliggende rij alleen als deze geen onderliggende rij heeft

  3. Doctrine Column niet gevonden:1054 Onbekende kolom 's.features' in 'field list''

  4. Hoe kan ik niet-Engelse tekenreeksen sorteren in MySQL?