Я использую MySQL 5.7
, чтобы вычислить разницу во времени в секундах между последовательными строками. У меня есть несколько вопросов
- Как выбрать предыдущую строку для использования при расчете каждой результирующей строки? В частности, какая часть запроса фактически делает это?
- Как я могу отфильтровать столбец
@diff
, чтобы исключить 0
или значения, превышающие, скажем, 60
секунд? Каждый раз, когда я пытаюсь добавить предложение WHERE
, я получаю сообщение об ошибке.
- После того, как я отфильтрую, смогу ли я
SUM
столбец @diff
получить общее время?
Запрос
SELECT @diff AS start,
created AS end,
IF(@diff = 0, 0, UNIX_TIMESTAMP(`created`) - UNIX_TIMESTAMP(@diff)) AS diff,
@diff := created AS endtime
FROM events,
(SELECT @diff := 0) AS x
ORDER BY events.created
Исходная таблица events
Desc | Timestamp
-------------------------------
Event 1 | 2019-01-03 17:21:03
Event 2 | 2019-01-03 17:21:03
Event 3 | 2019-01-03 17:21:03
Event 4 | 2019-01-03 17:21:14
Event 5 | 2019-01-03 17:21:16
Event 6 | 2019-01-03 17:25:46
Текущий результат
start | end | diff | endtime
-------------------------------------------------------------------------
0 | 2019-01-03 17:21:03 | 0 | 2019-01-03 17:21:03
2019-01-03 17:21:03 | 2019-01-03 17:21:03 | 0.000000 | 2019-01-03 17:21:03
2019-01-03 17:21:03 | 2019-01-03 17:21:03 | 0.000000 | 2019-01-03 17:21:03
2019-01-03 17:21:03 | 2019-01-03 17:21:14 | 11.00000 | 2019-01-03 17:21:14
2019-01-03 17:21:14 | 2019-01-03 17:21:16 | 2.000000 | 2019-01-03 17:21:16
2019-01-03 17:21:16 | 2019-01-03 17:25:46 | 270.0000 | 2019-01-03 17:25:46
Желаемый результат
start | end | diff | endtime
-------------------------------------------------------------------------
2019-01-03 17:21:03 | 2019-01-03 17:21:14 | 11.00000 | 2019-01-03 17:21:14
2019-01-03 17:21:14 | 2019-01-03 17:21:16 | 2.000000 | 2019-01-03 17:21:16