Re: Diferencia entre timestamp a interval en formato horas

From: Jairo Graterón <jgrateron(at)gmail(dot)com>
To: mauricio pullabuestan <jmauriciopb(at)yahoo(dot)es>
Cc: Ayuda Esp PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Diferencia entre timestamp a interval en formato horas
Date: 2018-05-02 04:06:31
Message-ID: CALnU-rPtBiw+coGiphkgrA_zb58_JJTASDc9sjzHztK21sFKEg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Saludos

with t as (
Select inicial, final, final - inicial, date_part('day',final - inicial) as
d_day, date_part('hour',final-inicial) as d_hour,
date_part('minute',final-inicial) as d_min,
date_part('second',final-inicial) as d_sec
from tiempos)

select inicial, final, (d_day * 24 + d_hour || ':' || d_min || ':' ||
d_sec) as diferencia from t
order by d_day DESC, d_hour DESC, d_min DESC, d_sec DESC

2018-03-16 19:59:34; 2018-03-18 07:58:49; 35:59:15
2018-03-15 07:39:57; 2018-03-15 21:06:44; 13:26:47
2018-03-15 21:06:44; 2018-03-16 07:55:20; 10:48:36
2018-03-16 07:55:20; 2018-03-16 15:38:58; 7:43:38
2018-03-18 07:58:49; 2018-03-18 14:34:34; 6:35:45
2018-03-16 15:38:58; 2018-03-16 19:59:34; 4:20:36

No existe horas de 35 o más por eso lo convertí en texto y para ordenar se
usa los campos d_day, d_hour, d_min y d_sec

El 1 de mayo de 2018, 22:56, mauricio pullabuestan <jmauriciopb(at)yahoo(dot)es>
escribió:

> Buen día.
>
> Tengo los siguientes datos de ejemplo
>
> Create table tiempos (inicial timestamp, final timestamp);
>
> Insert Into tiempos
> Values
> ('2018-03-15 07:39:57', '2018-03-15 21:06:44'),
> ('2018-03-15 21:06:44', '2018-03-16 07:55:20'),
> ('2018-03-16 07:55:20', '2018-03-16 15:38:58'),
> ('2018-03-16 15:38:58', '2018-03-16 19:59:34'),
> ('2018-03-16 19:59:34', '2018-03-18 07:58:49'),
> ('2018-03-18 07:58:49', '2018-03-18 14:34:34');
>
> Select inicial, final, final - inicial As diferencia
> from tiempos;
>
>
> Inicial Final
> Diferencia
> 2018-03-15 07:39:57 2018-03-15 21:06:44 13:26:47
> 2018-03-15 21:06:44 2018-03-16 07:55:20 10:48:36
> 2018-03-16 07:55:20 2018-03-16 15:38:58 07:43:38
> 2018-03-16 15:38:58 2018-03-16 19:59:34 04:20:36
> 2018-03-16 19:59:34 2018-03-18 07:58:49 1 day 11:59:15
> 2018-03-18 07:58:49 2018-03-18 14:34:34 06:35:45
>
>
> Cuando la diferencia es mayor a un día me muestra 1 day 11:59:15, necesito
> que me muestre en formato de horas, es decir 35:59:15, así cuando haga un
> balance de la columna diferencia mantenga el formato de horas.
>
>
> With t
> AS
> (
> Select inicial, final, final - inicial As diferencia
> from tiempos
> )
> Select *
> , sum(diferencia)
> OVER(ORDER BY inicial
> ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS balance
> From t;
>
> Inicial Final
> Diferencia balance
> 2018-03-15 07:39:57 2018-03-15 21:06:44 13:26:47
> 13:26:47
> 2018-03-15 21:06:44 2018-03-16 07:55:20 10:48:36
> 24:15:23
> 2018-03-16 07:55:20 2018-03-16 15:38:58 07:43:38
> 31:59:01
> 2018-03-16 15:38:58 2018-03-16 19:59:34 04:20:36
> 36:19:37
> 2018-03-16 19:59:34 2018-03-18 07:58:49 1 day 11:59:15
> 1 day 48:18:52
> 2018-03-18 07:58:49 2018-03-18 14:34:34 06:35:45
> 1 day 54:54:37
>
> Aquí se me muestra como lo necesito incluso cuando el tiempo es mayor a
> 24:00 h, pero se encuentra con un valor 1 day el formato es otro, como
> puedo hacer para que todos los cálculos se muestren en formato hora?
>
>
> Saludos
> Mauricio
>
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message gilberto.castillo 2018-05-02 12:10:04 Re: [MASSMAIL]Re: Log de conexion
Previous Message mauricio pullabuestan 2018-05-02 02:56:57 Diferencia entre timestamp a interval en formato horas