Re: Tiempo entre cambio de valores

From: "Guillermo E(dot) Villanueva" <guillermovil(at)gmail(dot)com>
To: Anthony Sotolongo <asotolongo(at)gmail(dot)com>
Cc: ocascante(at)opensoftwarecr(dot)com, pgsql-es-ayuda <pgsql-es-ayuda(at)lists(dot)postgresql(dot)org>
Subject: Re: Tiempo entre cambio de valores
Date: 2021-03-22 12:44:46
Message-ID: CANm+PCDaCeZNikemNz9+HLmvo=LB9SzfumgHDRgcxoZxrjJtaw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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 (<asotolongo(at)gmail(dot)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, ocascante(at)opensoftwarecr(dot)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" <guillermovil(at)gmail(dot)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, <ocascante(at)opensoftwarecr(dot)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 <asotolongo(at)gmail(dot)com <asotolongo(at)gmail(dot)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 >>
>> <asotolongo(at)gmail(dot)com <asotolongo(at)gmail(dot)com> <mailto:asotolongo(at)gmail(dot)com>>
>> <asotolongo(at)gmail(dot)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 >>*
>>
>>
>
>
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message ocascante 2021-03-23 17:01:53 Re: Tiempo entre cambio de valores
Previous Message Anthony Sotolongo 2021-03-21 21:21:59 Re: Tiempo entre cambio de valores