Re: Tiempo entre cambio de valores

From: ocascante(at)opensoftwarecr(dot)com
To: pgsql-es-ayuda(at)lists(dot)postgresql(dot)org
Subject: Re: Tiempo entre cambio de valores
Date: 2021-03-23 17:01:53
Message-ID: 20210323100153.Horde.UzZBjKilUdoNbhKQOMfStBd@www.opensoftwarecr.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Muchas gracias a todos,

Esa es la solución solo que al principio daba un error debido a que el
campo donde identifico el dispositivo se llamaba "deviceID" y esto me
daba un error en el sql. Al cambiar las letras mayúsculas por
minúsculas ya me dió el dato correcto. ( deviceid )

Gracias

"Guillermo E. Villanueva" <guillermovil(at)gmail(dot)com> escribió:

> 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> 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 <mailto:asotolongo(at)gmail(dot)com>>[1] 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
>>>>>>> _
>>>>>  
>>>
>>>
>>>  

Vínculos:
---------
[1] mailto:asotolongo(at)gmail(dot)com%3E%3E

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Romero, Fernando 2021-03-23 23:37:11 Consulta extract year
Previous Message Guillermo E. Villanueva 2021-03-22 12:44:46 Re: Tiempo entre cambio de valores