<предварителен код>; С valid_positions AS (ИЗБЕРЕТЕ MMSI, Message_ID, "Time" , Latitude , Longitude FROM dbo.DecodedCSVMessages_Staging WHERE Latitude> 55 AND Latitude <85 AND Longitude> 50 AND Longitude <141), позиции 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 )), подробности AS ( SELECT MMSI , Ship_Type , Vessel_Name , Row_Number() OVER (PARTITION BY) MMSI ORDER BY "Time" DESC) Като 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.LongitudeFROM позиции INNER JOIN детайли ON детайли.MMSI =поз itions.MMSI И details.row_num =1 -- Ограничение до „най-новите“ данни за кораба на MMSI
Сега се използва 3-ти CTE.
валидни_позиции
:Всякакви записва, където координатите отговарят на вашите критерии, за всеки Message_ID
2)
позиции
:всички записи, където Message_ID
е равно на 1 или 3и има запис в съответния MMSI
в валидни_позиции
подробности
:непроменен от преди. Показва „най-новите“ подробности за кораба/съда (Message_ID
=5)