Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dostosowanie zapytania SQL

; 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

Obecnie używany jest trzeci CTE.

  1. valid_positions :dowolne rekordy, w których współrzędne spełniają Twoje kryteria, dla dowolnego Message_ID 2)
  2. positions :wszystkie rekordy, w których Message_ID równa się 1 lub 3 i istnieje rekord w odpowiednim MMSI w valid_positions
  3. details :bez zmian od poprzedniej. Pokazuje „najnowsze” szczegóły statku/statku (Message_ID =5)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. IIF(...) nie jest rozpoznaną wbudowaną funkcją

  2. Grupy dostępności programu SQL Server AlwaysOn:instalacja i konfiguracja, część 2

  3. jak agregować wartości z obrotu?

  4. Model odzyskiwania zmian SQL Server

  5. Jak przekazać parametry wartości tabeli do procedury składowanej z kodu .net?