dpa*_*alm 3 sql sql-server-2008
我在名为dbo.DecodedCSVMessages_Staging的表中有以下数据
以下是数据示例:
MMSI Message_ID Time Ship_Type Vessel_Name Latitude Longitude
2102930 3 2012-06-01 NULL NULL 56.528003 85.233443
2102930 5 2012-07-01 70 RIO_CUBAL NULL NULL
2109300 1 2012-08-01 NULL NULL 57.43234 131.123343
2109300 1 2012-09-01 NULL NULL 62.432345 121.123343
2109300 1 2012-09-02 NULL NULL 65.432345 140.123343
2109300 5 2012-08-01 70 RIO_CUBAL NULL NULL
2225555 1 2012-08-01 NULL NULL 66.432345 143.123343
2225555 1 2012-09-01 NULL NULL 25.432345 145.123343
2225555 5 2012-08-01 70 RIO_II NULL NULL
Run Code Online (Sandbox Code Playgroud)
我需要的是如下:
我只需要属于下列经度和纬度的船只
Ship_Type可能会改变!在这种情况下,它必须反映较晚的日期
纬度> 55,纬度<85,经度> 50,经度<141;
查询数据的结果将产生以下结果(当我使用此信息在ArcGIS中构建点要素时,我将保存为CSV格式)
MMSI Message_ID Time Ship_Type Vessel_Name Latitude Longitude
2102930 3 2012-06-01 70 RIO_CUBAL 56.528003 85.233443
2109300 1 2012-08-01 70 RIO_CUBAL 57.43234 131.123343
2109300 1 2012-09-01 70 RIO_CUBAL 62.432345 121.123343
2109300 1 2012-09-02 70 RIO_CUBAL 65.432345 140.123343
2225555 1 2012-08-01 70 RIO_II 66.432345 143.123343
Run Code Online (Sandbox Code Playgroud)
所以所有Message_ID 5都消失了
倒数第二行消失了(因为纬度仅为25.432345)
通过使用MMSI进行链接,已将信息Ship_Type和Vessel_Name添加到Message_ID 1和3中.
制约因素:
可能是什么?谢谢!
这样的事情应该这样做:
; 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
103 次 |
最近记录: |