Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ricardo Félix da Silva Jr.

Inconsistência utilizando DISTINCT COUNT

Recommended Posts

Tenho uma tabela de visitantes que armazena o ip e a data da visita e preciso gerar um relatórios com o número de visitas únicas (ip distintos) organizados por ano e mês, tentei utilizar a query abaixo mas estou obtendo como resultado uma query com o nmero de visitantes total por ano/mês maior do que deveria:

 

SELECT	 YEAR(dtreg) AS Ano, MONTH(dtreg) AS Mes, COUNT(DISTINCT ip) AS TotalFROM		 visitorsGROUP BY YEAR(dtreg), MONTH(dtreg)ORDER BY Ano, Mes

Alguém sabe o que estou fazendo errado e como solucionar o problema?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ricardo,

 

Tenta sem o distinct, só com o count e agrupando por ip tb., com isso o ip não vai se repetir,vai ser agrupado

 

SELECT YEAR(dtreg) AS Ano, MONTH(dtreg) AS Mes, ip AS Total, count(*)FROM visitorsGROUP BY YEAR(dtreg), MONTH(dtreg), ipORDER BY Ano, Mes
t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum agora acho que entendi...rss

 

tenta assim, joga numa virtual só os meses e depois na virtual faz um sub-select fazendo o count distinct, +ou- assim:

set nocount ondeclare @visitors table (dtreg datetime, ip varchar(30))insert into @visitors(dtreg, ip) values ('2007-06-13', '1')insert into @visitors(dtreg, ip) values ('2007-07-10', '1')insert into @visitors(dtreg, ip) values ('2007-07-19', '1')insert into @visitors(dtreg, ip) values ('2007-07-22', '1')insert into @visitors(dtreg, ip) values ('2007-06-03', '2')insert into @visitors(dtreg, ip) values ('2007-06-15', '2')insert into @visitors(dtreg, ip) values ('2007-07-18', '2')insert into @visitors(dtreg, ip) values ('2007-07-20', '3')insert into @visitors(dtreg, ip) values ('2007-07-25', '3')SELECT distinct YEAR(dtreg) AS Ano, MONTH(dtreg) AS Mes into #tempFROM @visitors vpGROUP BY YEAR(dtreg), MONTH(dtreg)ORDER BY Ano, Messelect ano, mes, 	(select count(distinct ip) from @visitors where YEAR(dtreg) = ano and  MONTH(dtreg) = mes) as totalfrom #temp drop table #temp

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Erivelton, agradeço mais uma vez mas o raltório continua inconsistente. Acredito que o problema seja que da forma como estamos realizando as consultas os visitantes são únicos apenas no mês consultado e podem estar sendo repetidos nos outros meses, veja exemplo:IP Data200.192.157.12 Jun/07200.192.157.12 MAI/07No caso listado acima o visitante está sendo contado no mês de Junho e de Maio.Os visitantes precisam ser únicos durante todo o período!Se puder me ajudar novamente!Agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta o seguinte, pegar os IP distintos e depois agrupar

 

SELECT	 YEAR(dtreg) AS Ano, MONTH(dtreg) AS Mes, COUNT(ip) AS TotalFROM		 visitorsWHERE ip in (select distinct ip from visitors)GROUP BY YEAR(dtreg), MONTH(dtreg)ORDER BY Ano, Mes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara finalmente consegui, mas tive que fazer com passagem de parâmetro por ano:

 

@year intASSELECT COUNT(ip) as Total, YEAR(dtReg) as Ano, MONTH(dtReg) as Mes FROM(SELECT DISTINCT ip, MIN(dtreg) AS dtReg FROM visitors WHERE YEAR(dtReg)=@year GROUP BY ip) As TempGROUP BY YEAR(dtReg), MONTH(dtReg)ORDER BY YEAR(dtReg), MONTH(dtReg)

Dessa forma a soma de visitas do relatório de contagem mensal bate com o anual!!! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Obrigado pelo atenção!

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza Ricardo, legal que encontrou a solução e compartilhou conosco

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.