Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Điều chỉnh truy vấn 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

Hiện đã có CTE thứ 3 đang được sử dụng.

  1. valid_positions : bất kỳ ghi lại nơi các tiêu chí phối hợp của bạn, cho bất kỳ Message_ID nào 2)
  2. positions :tất cả các bản ghi trong đó Message_ID bằng 1 hoặc 3 có một bản ghi trong MMSI tương ứng trong valid_positions
  3. details :không thay đổi so với trước. Hiển thị chi tiết tàu / tàu "mới nhất" (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. Thêm một số hàng vào tập hợp kết quả của một truy vấn SQL

  2. chuỗi tương đương với Sum để nối

  3. Ngăn chặn việc lưu các thay đổi yêu cầu tạo lại bảng có ảnh hưởng tiêu cực

  4. Công việc SQL Server Agent - Xuất kết quả sang Tệp được phân cách bằng tab?

  5. T-SQL - Có cách nào (miễn phí) để so sánh dữ liệu trong hai bảng không?