Tengo la siguiente tabla.
tabla1 :
id_user | action | time --------+--------+---------------------- 1 | 2 | '2009-05-18 11:45:42' 1 | 2 | '2009-05-18 11:45:45' 1 | 3 | '2009-05-18 11:45:50' 1 | 2 | '2009-05-18 11:46:50' Y quiero lograr un resultado donde la columna timediff contenga timediff con la fila anterior en segundos.
Tabla 2
id_user | action | timediff --------+--------+---------- 1 | 2 | 3 1 | 2 | 5 1 | 3 | 60Intenté esta consulta, pero no funcionó:
SELECT id_user,action, TIMESTAMPDIFF(SECOND,LEAD(time),time) OVER (PARTITION BY id_user, ORDER BY time) AS timediff FROM table1... pero arroja un error. :/
Leí otras respuestas, pero no vi una que use LEAD o LAG con TIMESTAMPDIFF simultáneamente.
Gracias por adelantado.
Tu sintaxis es incorrecta, debes usar esto:
SELECT id_user, action, TIMESTAMPDIFF( SECOND, time, LEAD(time) OVER (PARTITION BY id_user ORDER BY time) ) AS timediff FROM table1 Los argumentos 2 y 3 de la función TIMESTAMPDIFF() son expresiones de fecha y hora y el 2 se resta del 3.
Ver la demostración .
Resultados:
| id_user | action | timediff | | ------- | ------ | -------- | | 1 | 2 | 3 | | 1 | 2 | 5 | | 1 | 3 | 60 | | 1 | 2 | |