Вычислить разницу во времени между двумя строками
У меня есть таблица со столбцом 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