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

#mysql

#mysql

Вопрос:

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

Спасибо.


@ Mark Byers и @ Yahia, у меня есть таблица запросов в качестве идентификатора запроса, дата начала

 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
 

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

Комментарии:

1. Последовательный в соответствии с каким полем? Можете ли вы привести пример того, что вы хотите?

Ответ №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
 

ЕСЛИ 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
 

Комментарии:

1. Вторая цель может быть написана с starttime помощью вместо requestid !!

Ответ №2:

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

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

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

 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