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
