Em 09/11/16, Osvaldo Kussama<[email protected]> escreveu:
> Em 09/11/16, Carlos Antônio<[email protected]> 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
>

Ou mesmo utilizar a função extract com hour?

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a