2016-10-05 7 views
0

У меня есть таблица вроде этого:Вычислить Разница во времени между двумя последовательными рядами

RecordID  TransDate 
1   05-Oct-16 9:33:32 AM 
2   05-Oct-16 9:33:37 AM 
3   05-Oct-16 9:33:41 AM 
4   05-Oct-16 9:33:46 AM 
5   05-Oct-16 9:33:46 AM 

Мне нужно, чтобы получить разницу между последовательными TransDate значений. Я использую SQL Server 2014, и знаю, как использовать функции LAG для этого, но я не знаю, как это сделать.

мне нужен этот вывод:

RecordID  TransDate    Diff 
1   05-Oct-16 9:33:32 AM 0:00:00 
2   05-Oct-16 9:33:37 AM 0:00:05 
3   05-Oct-16 9:33:41 AM 0:00:04 
4   05-Oct-16 9:33:46 AM 0:00:05 
5   05-Oct-16 9:33:46 AM 0:00:00 

Любые идеи?

Заранее благодарен!

ответ

2

Как об этом:

select recordid, transdate, 
     cast((transdate - lag(transdate) over (order by transdate)) as time) as diff 
from t; 

Другими словами, вы можете вычесть два datetime значения и отбрасывать результат как раз. Затем вы можете отформатировать результат, как вам нравится.

+0

Элегантный, простой и эффективной. Благодаря! Мне нужно будет изучить эти функции задержки, похоже, я буду использовать их чаще всего сейчас. – controller

0

Может быть, немного Hacky:

SELECT RecordId/2 AS id, min(TransDate) AS TransDate, max(TransDate) - min(TransDate) AS Diff GROUP BY RecordId/2 

Непроверено, потому что у меня прямо сейчас нет SQL Server отсутствует.

1

Беспоставочной Лаг/ведущий подход ...

select T1.recordId, T1.TransDate, datediff(ss, T1.TransDate, T2.Transdate) as Diff 
from Table1 T1 
left join Table1 T2 
on T1.Recordid = T2.RecordId +1 
Смежные вопросы