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