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

Zaawansowane zapytanie SQL

Coś takiego powinno wystarczyć:

; WITH positions AS (
  SELECT MMSI
       , Message_ID
       , "Time"
       , Latitude
       , Longitude
  FROM   dbo.DecodedCSVMessages_Staging
  WHERE  Message_ID IN (1, 3)
  AND    Latitude  > 55
  AND    Latitude  < 85
  AND    Longitude > 50
  AND    Longitude < 141
)
, 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak aparat bazy danych obsługuje współbieżne wstawianie?

  2. Instrukcja UPDATE kolidowała z ograniczeniem REFERENCE - SQL Server / TSQL Tutorial, część 76

  3. MSSQL cast([varcharColumn] to int) w SELECT jest wykonywany przed klauzulą ​​WHERE odfiltrowującą złe wartości

  4. Jak przekazać nazwę tabeli do przechowywanego proc?

  5. Lista funkcji daty i czasu w SQL Server (T-SQL)