Fórum Group by e Data - repetição de dados #56447
04/07/2006
0
D7 + Dbexpress + Firebird 1.5
´select a.destino, d.descricao, a.causa, c.descricao, ´+
´EXTRACT(month from data_hora), ´+
´extract(year from data_hora), count(a.destino), ´+
´count(a.causa) from ATENDIMENTO a ´+
´inner join DESTINO d on (a.destino = d.codigo) ´+
´inner join TP_CAUSA c on (a.causa = c.codigo) ´+
´group by a.destino, d.descricao, a.causa, c.descricao, ´+
´EXTRACT(month from a.data_hora), EXTRACT(year from a.data_hora) ´+
´having (count(a.destino) > :inum) and ´+
´(EXTRACT(month from a.data_hora) between :imes and :fmes) and ´+
´(EXTRACT(year from a.data_hora) between :iano and :fano) ´+
´order by a.destino, count(a.causa) DESC ´;
fiz esta instrução SQL, para me dar um relatório de:
** E UM SISTEMA DE GERENCIAMENTO DE AMBULANCIAS
destino: Onde procedeu a chamada (endereço - Bairro)
Causa : Causa da Chamada (infarte, fratura, febre)
esta funcionando beleze quando a pesquisa é feita dentro de um mês, mas quado usa dois meses, a pesquisa aparece as causas duas veses, quento eu precisaria que somasse os dois meses e aparecesse a causa somente uma vez.
Onde está o erro, poderiam me ajudar ??
Emery
´select a.destino, d.descricao, a.causa, c.descricao, ´+
´EXTRACT(month from data_hora), ´+
´extract(year from data_hora), count(a.destino), ´+
´count(a.causa) from ATENDIMENTO a ´+
´inner join DESTINO d on (a.destino = d.codigo) ´+
´inner join TP_CAUSA c on (a.causa = c.codigo) ´+
´group by a.destino, d.descricao, a.causa, c.descricao, ´+
´EXTRACT(month from a.data_hora), EXTRACT(year from a.data_hora) ´+
´having (count(a.destino) > :inum) and ´+
´(EXTRACT(month from a.data_hora) between :imes and :fmes) and ´+
´(EXTRACT(year from a.data_hora) between :iano and :fano) ´+
´order by a.destino, count(a.causa) DESC ´;
fiz esta instrução SQL, para me dar um relatório de:
** E UM SISTEMA DE GERENCIAMENTO DE AMBULANCIAS
destino: Onde procedeu a chamada (endereço - Bairro)
Causa : Causa da Chamada (infarte, fratura, febre)
esta funcionando beleze quando a pesquisa é feita dentro de um mês, mas quado usa dois meses, a pesquisa aparece as causas duas veses, quento eu precisaria que somasse os dois meses e aparecesse a causa somente uma vez.
Onde está o erro, poderiam me ajudar ??
Emery
Emery
Curtir tópico
+ 0
Responder
Posts
04/07/2006
Emerson Nascimento
o erro está na sua cláusula ´group by´. ali você pede para agrupar por mês, portanto cada mês será uma nova linha exibida.
eu acredito que essa instrução vá falhar na seleção do período.
imagine que o usuário selecionou o período de 02/2004 até 03/2005.
o que o sistema irá exibir?
pela montagem da instrução, creio que exibirá somente os meses:
02/2004
03/2004
02/2005
03/2005
mas o correto seria
02/2004
03/2004
04/2004
05/2004
06/2004
07/2004
08/2004
09/2004
10/2004
11/2004
12/2004
01/2005
02/2005
03/2005
select a.destino, d.descricao, c.descricao, count(a.destino), count(a.causa) from ATENDIMENTO a inner join DESTINO d on (a.destino = d.codigo) inner join TP_CAUSA c on (a.causa = c.codigo) where (EXTRACT(month from a.data_hora) between :imes and :fmes) and EXTRACT(year from a.data_hora) between :iano and :fano) group by a.destino, d.descricao, a.causa, c.descricao having count(a.destino) > :inum order by a.destino, count(a.causa) DESC
eu acredito que essa instrução vá falhar na seleção do período.
imagine que o usuário selecionou o período de 02/2004 até 03/2005.
o que o sistema irá exibir?
pela montagem da instrução, creio que exibirá somente os meses:
02/2004
03/2004
02/2005
03/2005
mas o correto seria
02/2004
03/2004
04/2004
05/2004
06/2004
07/2004
08/2004
09/2004
10/2004
11/2004
12/2004
01/2005
02/2005
03/2005
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)