Excelente, esa es la solución, gracias a las funciones de ventana y a Anthony
El dom, 21 mar 2021 a las 18:22, Anthony Sotolongo (<asotolo...@gmail.com>) escribió: > Hola nuevamente, la solución sería entonces como te comenta Juan José, > usando window functions, en este caso lead > > > create table tabla_ejemplo (ts timestamp, err int, deviceid text); > > insert into tabla_ejemplo values > ('2021-03-04 16:29:15.538263-06' , 10000 , '1d993kld00dl303'), > ('2021-03-04 16:29:27.770273-06' , 20000 , '1d993kld00dl303'), > ('2021-03-04 16:30:27.690168-06' , 10050 , '1d993kld00dl303'), > ('2021-03-04 16:31:31.729803-06' , 10000 , '1d993kld00dl303'), > ('2021-03-04 16:35:31.729803-06' , 20000 , '1d993kld00dl303'); > > select > deviceid, > err, > coalesce(-(ts - lead(ts) over(partition by deviceid order by ts)), > -(ts-now())) as tiempo_cambio > from tabla_ejemplo; > > > deviceid | err | tiempo_cambio > -----------------+-------+------------------------ > 1d993kld00dl303 | 10000 | 00:00:12.23201 > 1d993kld00dl303 | 20000 | 00:00:59.919895 > 1d993kld00dl303 | 10050 | 00:01:04.039635 > 1d993kld00dl303 | 10000 | 00:04:00 > 1d993kld00dl303 | 20000 | 17 days 01:44:05.57738 > (5 rows) > > Saludos > On 3/20/21 11:53 AM, ocasca...@opensoftwarecr.com wrote: > > Hola Guillermo, este es un ejemplo de los registros sobre los que debo > ejecutar el query: > > Timestamp - Codigo de error - Device ID > > 2021-03-04 16:29:15.538263-06 | 10000 | 1d993kld00dl303 > 2021-03-04 16:29:27.770273-06 | 20000 | 1d993kld00dl303 > 2021-03-04 16:30:27.690168-06 | 10050 | 1d993kld00dl303 > 2021-03-04 16:31:31.729803-06 | 10000 | 1d993kld00dl303 > 2021-03-04 16:35:31.729803-06 | 20000 | 1d993kld00dl303 > > Sobre estos datos, necesito sabe cuanto tiempo estuvo activo cada error, > viendo estos datos sería: > > Error 10000 tiempo 12 segundos > Error 20000 tiempo 1 minutos > Error 10050 tiempo 1 minuto y 4 segundos > Error 10000 tiempo 4 minutos > Error 20000 tiempo: este debería calcularse en base a el tiempo en que se > ejecuta la consulta ya que no existe un nuevo registro en base al cual > calcularlo. > > Saludos > > > "Guillermo E. Villanueva" <guillermo...@gmail.com> escribió: > > Danos un ejemplo de unos cuantos valores de la tabla y de la salida que > quieras que tenga tu consulta > > > El mar, 16 mar 2021 a las 15:40, <ocasca...@opensoftwarecr.com> escribió: > >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> *Hola Antonio y Juan, Les explico un poco más, yo envío desde un >> dispositivo el siguiente registro: <timestamp> <device ID > <errorcode> >> solamente tres campos donde se registra un error perteneciente a un device >> id, el timestamp es automático de postgresql. Entonces yo necesito un sql >> que me calcule el tiempo en que tardo cada error en cambiar. Es decir, >> cuanto tiempo estuvo en error 1, cuanto en error 2, etc. Saludos. Anthony >> Sotolongo <asotolo...@gmail.com <asotolo...@gmail.com>> escribió: > Cierto >> Juan..., por algun motivo interpreté que hacia update de > atributo Estado >> > > > Saludos > > On 3/5/21 9:49 AM, Juan José Santamaría Flecha wrote: >> >> >> On Fri, Mar 5, 2021 at 4:29 AM Anthony Sotolongo >> >> <asotolo...@gmail.com <asotolo...@gmail.com> <mailto:asotolo...@gmail.com>> >> <asotolo...@gmail.com%3E%3E> wrote: >> >> Hola, si en el atributo Time >> guardas el momento(timestamp) en que >> cambió >> de estado, puedes >> implementar un mecanismo de trigger que >> registre, el >> cambio de >> estado y el tiempo que estuvo, en otra tabla, o también >> puedes >> implementar algun otro mecanismo de versionado de registros y >> >> calcular la diferencia de tiempo. >> >> > Existe algún sql donde yo >> pueda ver cuanto tiempo tiene cada >> valor? Es >> > decir, cuanto >> tiempo estuvo en 0 hasta pasar a 1, cuanto a 1 hasta >> > pasar a 0. >> >> >> >> Juraría que la información que quieres sacar es: >> >> select >> >> Dispositivo, >> Time, >> Estado, >> coalesce(Time - lag(Time) >> over(partition by Dispositivo order by >> Time), '0 day'::interval) as >> cambio >> from tabla_iot; >> >> Un saludo, >> >> Juan José Santamaría >> Flecha >>* >> >> > > >