Вычислить разницу во времени между двумя строками

У меня есть таблица со столбцом StartDate, я хочу рассчитать разницу во времени между двумя последовательными записями.

Спасибо.


@Марк Байерс и @Yahia, у меня есть таблица запросов как requestId, startdate

requestId    startdate               
1            2011-10-16 13:15:56
2            2011-10-16 13:15:59
3            2011-10-16 13:15:59
4            2011-10-16 13:16:02
5            2011-10-16 13:18:07

и я хочу знать, какова разница во времени между requestid 1 и 2, 2 и 3, 3 и 4 и так далее. Я знаю, что мне нужно будет самостоятельно присоединиться к таблице, но я не получаю правильное предложение.

Ответы

Ответ 1

Чтобы добиться того, что вы просите, попробуйте следующее (ОБНОВЛЕНИЕ после редактирования из OP):

SELECT A.requestid, A.starttime, (B.starttime - A.starttime) AS timedifference
FROM MyTable A INNER JOIN MyTable B ON B.requestid = (A.requestid + 1)
ORDER BY A.requestid ASC

IF requestid не является последовательным, тогда вы можете использовать

SELECT A.requestid, A.starttime, (B.starttime - A.starttime) AS timedifference
FROM MyTable A CROSS JOIN MyTable B
WHERE B.requestid IN (SELECT MIN (C.requestid) FROM MyTable C WHERE C.requestid > A.requestid)
ORDER BY A.requestid ASC

Ответ 2

Принятый ответ правильный, но дает разницу чисел. В качестве примера, если у меня есть следующие 2 метки времени:

2014-06-09 09:48:15
2014-06-09 09:50:11

Разница дается как 196. Это просто 5011 - 4815. Чтобы получить разницу во времени, вы можете изменить script следующим образом:

SELECT A.requestid, A.starttime, TIMESTAMPDIFF(MINUTE,A.starttime,B.starttime) AS timedifference 
FROM MyTable A INNER JOIN MyTable B ON B.requestid = (A.requestid + 1) 
ORDER BY A.requestid ASC

Ответ 3

SELECT TIMESTAMPDIFF(SECOND, grd.startdate, grd1.startdate) as TD FROM myTable A 
inner join myTable B on A.requestId = B.requestId - 1 and 
A.startdate >= '2019-07-01' order by TD desc