Ir para conteúdo

POWERED BY:

Arquivado

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

diegohamaz1

Problema com having count

Recommended Posts

Pessoal tenho as seguintes querys

select CO_USUARIO,TP_ORIGEM,DT_INCLUSAO from TB_GPS 
where NM_CNPJ IS NOT NULL AND NM_INCLUSAO 
like '%NOME_DO_USUARIO%' 
AND DT_INCLUSAO BETWEEN '2015-04-20' AND '2015-05-05' ;

Que me retorna

 

imagem1.png

 

O que eu quero fazer ... eu quero contar quantos registro tem 1 e 2 na mesma data para depois fazer um cálculo no meu sistema, no caso da minha segunda query deveriam sair os registros em verde e vermelho, essa primeira query é só para listagem dos resultados para eu fazer conferência de dados.

 

A segunda query

select gps.DT_INCLUSAO, gps.CO_USUARIO
from TB_GPS gps, TB_USUARIO usu 
where usu.CO_SEQ_USUARIO = gps.CO_USUARIO 
AND  gps.CO_USUARIO IN (1469) 
AND gps.DT_INCLUSAO BETWEEN  '2015-04-20 00:00:00' AND '2015-05-05 23:59:59' 
AND gps.ST_REGISTRO =1 
AND gps.TP_ORIGEM IN (1,2)
GROUP BY DATE_FORMAT(gps.DT_INCLUSAO,'%Y-%m-%d')
HAVING COUNT(DISTINCT gps.TP_ORIGEM) >= 2
ORDER BY CO_USUARIO;

O having count "deveria" retirar os registros que possuem a contagem de maior que > 1 mas ele ta interpretando errado, ele retira apenas o primeiro registro em verde na imagem acima e deixa os em vermelhos conforme mostra a imagem abaixo, como posso retirar esses registros da minha segunda query? Alguma coisa no having count porem nao sei o que é talvez transformar em inteiro , alguem pode me ajudar?

 

imagem2.png

 

 

Espero que tenham entendido...

 

Obrigado de qualquer forma...

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema é que mysql é mto gente boa...

entao algumas querys que estão erradas e nao deveriam rodar ele "remenda" e roda pra você.

 

Numa consulta agregada (com group by) um campo recebe uma função de agregacao (sum,count,max,min) ou é agregador (group by campo)

 

Então olhe sua consulta:

select gps.DT_INCLUSAO, gps.CO_USUARIO
<...>
GROUP BY DATE_FORMAT(gps.DT_INCLUSAO,'%Y-%m-%d')

ele interpreta que você esta usando group by pelos 3 campos, ou seja :gps.DT_INCLUSAO, gps.CO_USUARIO e DATE_FORMAT(gps.DT_INCLUSAO,'%Y-%m-%d')

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.