Não selecionar registro duplicados - Como fazer?!?!
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.
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
Curtidas 0
Respostas
Leonardo Xavier
20/10/2010
Utilize o comando Distinct do SQL.
SELECT DISTINCT (campos sua tabela separados por vírgula) FROM sua tabela //sem o ()
GOSTEI 0
Emerson Nascimento
20/10/2010
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
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
GOSTEI 0
Wilson Junior
20/10/2010
Sugiro não usar
e sim
Pois ficará mais rápido, já que o mesmo não precisa efetuar uma operação (EXTRACT) para cada registro.
Espero ter colaborado.
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.
GOSTEI 0
Bruno Batista
20/10/2010
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
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.
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.
GOSTEI 0
Silvio Morelo
20/10/2010
Obrigado a todos, funcionou perfeitamente.
GOSTEI 0