sql >> Databasteknik >  >> RDS >> Mysql

Översätta MySQL join till SQL Server-syntax?

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

Det är så du bör göra det i SQL Server. Det gör "sista/första/max/min/största-n-per grupp" lätt som en plätt.

PARTITION BY nyckelordet här är lika med GROUP BY satsen och ORDER BY här skulle översättas till MAX aggregatfunktion som du använde i MySQL

Genom att använda detta kan du göra några tjusiga saker som:

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. MySql, Postgres, Oracle och SQLServer ignorerar IS NOT NULL-filter

  2. Hur genererar man ett CREATE-skript för flera tabeller i pgAdmin III?

  3. Postgresql och jsonb - infoga en nyckel/värde i en multi-level array

  4. Hur man markerar poster eller värden i en Microsoft Access-rapport med villkorlig formatering