关于unix时间的sql server查询

时间:2016-06-18 10:41:54

标签: sql sql-server unix-timestamp

我有一个带有船舶信号条目的4列表。第1列是unix时间,具有3个月的行条目。第二个是船的名称。第三是经度。第四是纬度。同一船的许多条目具有不同的时间。我想要一个sql server查询,找到一个船的表行,没有超过10分钟且少于5个小时的条目。

1 个答案:

答案 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)。