; 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
अब तीसरे सीटीई का उपयोग किया जा रहा है।
valid_positions
:कोई भी किसी भीMessage_ID
. के लिए रिकॉर्ड जहां निर्देशांक आपके मानदंड के अनुकूल होते हैं 2)positions
:सभी रिकॉर्ड जहांMessage_ID
बराबर 1 या 3 और संबंधितMMSI
. में एक रिकॉर्ड हैvalid_positions
. मेंdetails
:पहले से अपरिवर्तित। "नवीनतम" जहाज/पोत विवरण दिखाता है (Message_ID
=5)