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 <jmaurici...@yahoo.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
>
>

Reply via email to