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
>
>
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 |