Fórum Não selecionar registro duplicados - Como fazer?!?! #388958

20/10/2010

0

Pessoal,
Eu preciso gerar uma consulta mensal de freqüência de pessoas, por exemplo:
Mês 10, dia 4 Segunda-Feira entrou 300 associados.Mês 10, dia 5 Terça-Feira entrou 560 associados.
O problema é que um associado pode ter entrado mais de uma vez no mesmo dia, e nesse caso eu preciso contar apenas uma vez.
Eu comecei a escrever o instrução, mas não consigo informar que se existir mais de uma entrada do mesmo associado no mesmo dia ele deve contar como 1 entrada somente.


Instrução SQL - Banco de Dados Firebird 2.0
select extract(day from ac001.dtentrada) as dia, extract(month from ac001.dtentrada) as mes, count(*)  from ac001 where extract(year from ac001.dtentrada) = 2010 group by extract(month from ac001.dtentrada), extract(day from ac001.dtentrada) order by 2, 1

Obrigado.
 
Silvio Morelo

Silvio Morelo

Responder

Posts

20/10/2010

Leonardo Xavier

Utilize o comando Distinct do SQL.

SELECT DISTINCT (campos sua tabela separados por vírgula) FROM sua tabela //sem o ()

Responder

Gostei + 0

20/10/2010

Emerson Nascimento

select
  extract(day from dtentrada) as dia,
  extract(month from dtentrada) as mes,
  count(DISTINCT idusuario)from
  ac001where
  extract(year from dtentrada) = 2010group by
  extract(month from dtentrada), extract(day from dtentrada)order by
  2, 1
Responder

Gostei + 0

20/10/2010

Wilson Junior

Sugiro não usar
where
  extract(year from dtentrada) = 2010


e sim
where
  dtentrada BETWEEN '01/01/2010' AND '12/31/2010'



Pois ficará mais rápido, já que o mesmo não precisa efetuar uma operação (EXTRACT) para cada registro.

Espero ter colaborado.
Responder

Gostei + 0

21/10/2010

Bruno Batista

Bom dia,

sugiro primeiro fazer um agrupamento dos usuários, posteriormente agrupar por dia, fazendo sub-consulta.

[code]
Select dia,
       mes,
       count(1) as quantidade
  From (select extract(day from ac001.dtentrada) as dia,
               extract(month from ac001.dtentrada) as mes,
               usuario
          from ac001
         where extract(year from ac001.dtentrada) = 2010
         group by extract(month from ac001.dtentrada),
                  extract(day from ac001.dtentrada),
                  usuario)
 group by dia,
          mes
 order by 2, 1
Pessoal,
Eu preciso gerar uma consulta mensal de freqüência de pessoas, por exemplo:
Mês 10, dia 4 Segunda-Feira entrou 300 associados.Mês 10, dia 5 Terça-Feira entrou 560 associados.
O problema é que um associado pode ter entrado mais de uma vez no mesmo dia, e nesse caso eu preciso contar apenas uma vez.
Eu comecei a escrever o instrução, mas não consigo informar que se existir mais de uma entrada do mesmo associado no mesmo dia ele deve contar como 1 entrada somente.


Instrução SQL - Banco de Dados Firebird 2.0
select extract(day from ac001.dtentrada) as dia, extract(month from ac001.dtentrada) as mes, count(*)  from ac001 where extract(year from ac001.dtentrada) = 2010 group by extract(month from ac001.dtentrada), extract(day from ac001.dtentrada) order by 2, 1

Obrigado.
 
Responder

Gostei + 0

21/10/2010

Silvio Morelo

Obrigado a todos, funcionou perfeitamente.
Responder

Gostei + 0

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

Aceitar