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


Emery

Emery

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.
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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar