我有一个带有船舶信号条目的4列表。第1列是unix时间,具有3个月的行条目。第二个是船的名称。第三是经度。第四是纬度。同一船的许多条目具有不同的时间。我想要一个sql server查询,找到一个船的表行,没有超过10分钟且少于5个小时的条目。
答案 0 :(得分:0)
这样的事情应该为你做(CTE + ROW_NUMBER()和自我加入):
;WITH cte AS(
SELECT unixtime,
shipname,
longitude,
latitude,
ROW_NUMBER() OVER (PARTITION BY shipname ORDER BY unixtime) as rn
FROM YourTable)
SELECT *
FROM cte c1
LEFT JOIN cte c2
ON c1.shipname = c2.shipname and c1.rn = c2.rn -1
AND (c2.unixtime - c1.unixtime) between 600 and 18000
WHERE c2.unixtime IS NULL
纪元时间戳(unixtime)是自1970-01-01T00:00:00Z
以来的秒数,因此您需要以秒为单位转换10分钟(600)和以秒为单位转换5小时(18000)。