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...
Att Carlos Antônio Pereira
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral