sql >> Database teknologi >  >> RDS >> Sqlserver

SQL-forespørgselsjustering

; WITH valid_positions AS ( SELECT MMSI , Message_ID , "Time" , Latitude , Longitude FROM dbo.DecodedCSVMessages_Staging WHERE Latitude > 55 AND Latitude < 85 AND Longitude > 50 AND Longitude < 141 ) , positions AS ( SELECT MMSI , Message_ID , "Time" , Latitude , Longitude FROM dbo.DecodedCSVMessages_Staging WHERE Message_ID IN (1, 3) AND EXISTS ( SELECT * FROM valid_positions WHERE valid_positions.MMSI = DecodedCSVMessages_Staging.MMSI ) ) , details AS ( SELECT MMSI , Ship_Type , Vessel_Name , Row_Number() OVER (PARTITION BY MMSI ORDER BY "Time" DESC) As row_num FROM dbo.DecodedCSVMessages_Staging WHERE Message_ID = 5 ) SELECT positions.MMSI , positions.Message_ID , positions."Time" , details.Ship_Type , details.Vessel_Name , positions.Latitude , positions.Longitude FROM positions INNER JOIN details ON details.MMSI = positions.MMSI AND details.row_num = 1 -- Limit to "latest" ship details per MMSI

Der er nu en 3. CTE i brug.

  1. valid_positions :enhver poster, hvor koordinaterne passer til dine kriterier, for enhver Message_ID 2)
  2. positions :alle poster hvor Message_ID er lig med 1 eller 3 og der er en post i tilsvarende MMSI i valid_positions
  3. details :uændret fra før. Viser de "seneste" skibs-/fartøjsdetaljer (Message_ID =5)


  1. Opgradering til PostgreSQL13

  2. MYSQL Vælg i samme tabel

  3. Summen af ​​en kolonne gruppe efter dato kolonne

  4. sammenføj to forskellige tabeller og fjern duplikerede poster