2016-06-18 4 views
-2

У меня есть стол с четырьмя столбцами с сигнальными вводами кораблей. 1-й столбец - это время unix с 3-месячной записью строк. Второе название корабля. Третья - долгота. Четвертая - широта. Есть много записей того же корабля с разным временем. Я хочу, чтобы запрос сервера sql, чтобы найти строки таблицы, которые корабль, не имеет записи более 10 минут и менее 5 часов.sql server query about unix time

+2

В какой части у вас проблемы и что вы пробовали? –

+0

Вы просите нас написать запрос для вас, но вы даже не потрудились предоставить надлежащий DDL. – Alex

ответ

0

Что-то, как это должно делать вещи для вас (КТР + 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 

Epoch метку времени (UnixTime) представляет собой число секунд, прошедших с 1970-01-01T00:00:00Z поэтому вам необходимо преобразовать 10 минут в секунд (600) и 5 ​​часов в секундах (18000).