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" <guillermo...@gmail.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 (<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> 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 <mailto:asotolo...@gmail.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:asotolo...@gmail.com%3E%3E

Reply via email to