sql >> Databáze >  >> RDS >> Sqlserver

Úprava dotazu 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

Nyní se používá 3. CTE.

  1. valid_positions :jakýkoli záznamy, kde souřadnice odpovídají vašim kritériím, pro jakékoli Message_ID 2)
  2. positions :všechny záznamy, kde Message_ID rovná se 1 nebo 3 a existuje záznam v odpovídajícím MMSI v valid_positions
  3. details :beze změny oproti dřívějšku. Zobrazuje „nejnovější“ podrobnosti o lodi/plavidle (Message_ID =5)


  1. Jak spouštět php skript automaticky denně?

  2. Jak exportovat tabulku do CSV pomocí Oracle SQL Developer?

  3. Najděte znak % v dotazu LIKE

  4. Jsou příkazy CHOP automaticky zakódovány?