Em 09/11/16, Carlos Antônio<carlosanto...@utivida.com.br> escreveu:
> Bom dia, pessoal
>
> Tenho uma tabela com os campos:
> ...
>   hsaequ timestamp without time zone,
>   hchde1 timestamp without time zone,
>   hsade1 timestamp without time zone,
>   hchde2 timestamp without time zone,
>   hsade2 timestamp without time zone,
>   hrede1 timestamp without time zone,
>   hlimov timestamp without time zone,
> ...
>
> Onde:
>   hsaequ - Hora de saída para o serviço
>   hchde1 - Hora de chegada ao destino 1
>   hsade1 - Hora de saída do destino 1
>   hchde2 - Hora de chegada ao destino 2
>   hsade2 - Hora de saída do destino 2
>   hrede1 - Hora de retorno ao destino 1
>   hlimov - Hora de liberação da equipe
>
>
> Para determinar o pico de atendimento, eu fiz uma view conforme abaixo:
>
> ...
> AS SELECT
>
> num_servico,
>
> -- Horarios de 00 a 23 horas
> CASE
> WHEN to_char(hsaequ, 'yyyy-mm-dd 00'::text || ':00')::timestamp
> BETWEEN to_char(hsaequ, 'yyyy-mm-dd HH24'::text || ':00')::timestamp AND
>     to_char(hlimov, 'yyyy-mm-dd HH24'::text || ':00')::timestamp THEN
>     1
> ELSE
>     0
> END as _00,
>
> ...
>
> CASE
> WHEN to_char(hsaequ, 'yyyy-mm-dd 23'::text || ':00')::timestamp
> BETWEEN to_char(hsaequ, 'yyyy-mm-dd HH24'::text || ':23')::timestamp AND
>     to_char(hlimov, 'yyyy-mm-dd HH24'::text || ':23')::timestamp THEN
>     1
> ELSE
>     0
> END as _23 from servico_recursos
>
>
> A intenção desta view é determinar a ocupação da equipe em um determinado
> período.
> O que estou fazendo é pegar a parte do campo que representa a hora (em
> hsaequ e hlimov) e contando  hsaequ dentro desse intervalo.
> Quando estiver no intervalo, conta 1. Caso contrário, conta 0.
>
> Exemplos de contagem (resultado da view):
>
> hsaequ = 01-12-2013 09:21
> hlimov = 01-12-2013 11:21
>     09:00 = 1
>     10:00 = 1
>     11:00 = 1
>
>
> hsaequ = 01-12-2013 07:05
> hlimov = 01-12-2013 13:01
>     07:00 = 1
>     08:00 = 1
>     09:00 = 1
>     10:00 = 1
>     11:00 = 1
>     12:00 = 1
>     13:00 = 1
>
>
> Posteriormente, para construir o relatório de ocupação, outrra view se faz
> necessária:
> AS SELECT
> ...
>
> sum(_00) AS soma_00,
> sum(_01) AS soma_01,
> sum(_02) AS soma_02,
> sum(_03) AS soma_03,
> ...
> sum(_23) AS soma_23
>
> FROM view_picos_hsaequ
>
> WHERE ...
>
>
> Finalmente, se consegui me fazer entender, gostaria de opiniões e sugestões,
> e se estou correto nesta lógica...
> Se é possível outra lógica mais precisa... Idéias...
>


Não seria mais simples utilizar a função date_trunc [1] do que
formatar sua data para texto?

[1] 
https://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC

Osvaldo
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a