Ir para conteúdo

POWERED BY:

Arquivado

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

diegohamaz1

Trazer contagem agrupada

Recommended Posts

galera tenho o seguinte SQL

 

 

select COUNT(*)
from TB_TBL gps where tbl.USUARIO = xx
AND tbl.NM_CNPJ = 'xx.xxx.xxx/xxxx-xx'
AND tbl.INCLUSAO BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
AND tbl.REGISTRO =1
AND tbl.ORIGEM IN (1,2)
GROUP BY tbl.ORIGEM;

 

o resultado é esse

1

2

 

se tiver 2 casos com 1 e 2 ele me retorna

2

2

 

Como eu faço para ele me retornar só a contagem desse agrupamento que no caso eu preciso que ele me retorne apenas 1 e no segundo caso 2.

 

Entenderam?


Só quero a contagem de tudo que tiver 1 e 2 , se for só 1 não conta....

Compartilhar este post


Link para o post
Compartilhar em outros sites

esta query ficaria mais clara assim

select ORIGEM , COUNT(ORIGEM) qtd
from TB_TBL gps where tbl.USUARIO = xx
AND tbl.NM_CNPJ = 'xx.xxx.xxx/xxxx-xx'
AND tbl.INCLUSAO BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
AND tbl.REGISTRO =1
AND tbl.ORIGEM IN (1,2)
GROUP BY tbl.ORIGEM;

Melhora o entendimento ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim , melhora .. rs

 

No caso essa query vai contar diversas entradas , então gostaria de contar quantas incidencias tem no banco com 1, 2, com base nessa pesquisa...

 

Se tiver 1 e 2 conta + 1 no contador , como posso fazer?

 

estou tentando com HAVING COUNT(DISTINCT ORIGEM) > 1.e não estou conseguindo...

 

NO CASO ESSE ORIGEM È UMA ENTRADA E SAIDA

 

GOSTARIA DE CONTAR QUANTAS VEZES ELES FEZ ENTRADA E SAIDA NAQUELE PERIODO E NAQUELE INTERVALO DE DATA, APARENTEMENTE SIMPLES MAS ESTOU AQUI QUEBRANDO A CABEÇA..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Confesso que não entendi o problema , faz um exemplo simples

 

tabela / dados / saída

Compartilhar este post


Link para o post
Compartilhar em outros sites

na tabela pode ter varios registros

 

cnpj origem

xx.xxx.xx 1

xx.xxx.xx 2

xx.xxx.xx 1

xx.xxx.xx 2

xx.xxx.xx 1

 

No caso o que tem entrada é saida (1 e 2) são 2 que é o que estão em vermelho,eu queria que a query contasse isso , no caso a minha query retorna 5 que é o que não preciso , quero a contagem de quantas vezes apareceram 1 e 2 o IN conta tudo...

 

Quero q a query me retorne 2 que é quantas vezes apareceram (1 e 2 )

Compartilhar este post


Link para o post
Compartilhar em outros sites

A query do post #2 faria isto em tese , qual o erro dela ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa query

select COUNT(tbl.ORIGEM) as conta , gps.*
 from TB_GPS gps where tbl.USUARIO = xx
 AND tbl.NM_CNPJ = 'xx.xxx.xxx/xxxx-xx'
 AND tbl.DT_INCLUSAO BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
 AND tbl.REGISTRO =1
 AND tbl.ORIGEM IN (1,2)
 GROUP BY tbl.ORIGEM

Não traz como eu quero por exemplo

 

no banco esta assim

 

cnpj origem data

xx.xx 1 26/03

xx.xx 1 26/03

xx.xx 1 27/03

xx.xx 2 27/03

 

na consulta a query me retorna 3 (origem 1 vermelhos) e 1 (origem 2 verde)

3

1

 

Quero que me retorne apenas 1 , porque tem apenas 1 incidencia com 1 e 2 , acho que ficou claro agora, estou perdendo tanto tempo nisso que estou quase tratando no codigo (gambiarra) que é o que não quero, quero que esta query me retorne certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

-- com 1 e 2

select tbl.DT_INCLUSAO
from TB_GPS gps where tbl.USUARIO = xx
AND tbl.NM_CNPJ = 'xx.xxx.xxx/xxxx-xx'
AND tbl.DT_INCLUSAO BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
AND tbl.REGISTRO =1
AND tbl.ORIGEM IN (1,2)
GROUP BY tbl.DT_INCLUSAO
HAVING COUNT(DISTINCT tbl.ORIGEM) >= 2

--QUEM SÃO

select *
from TB_GPS gps where tbl.USUARIO = xx
AND tbl.NM_CNPJ = 'xx.xxx.xxx/xxxx-xx'
AND tbl.DT_INCLUSAO IN (select tbl.DT_INCLUSAO
                        from TB_GPS gps where tbl.USUARIO = xx
                        AND tbl.NM_CNPJ = 'xx.xxx.xxx/xxxx-xx'
                        AND tbl.DT_INCLUSAO BETWEEN CURDATE() - INTERVAL 30 DAY AND 
                            CURDATE()
                        AND tbl.REGISTRO =1
                        AND tbl.ORIGEM IN (1,2)
                        GROUP BY tbl.DT_INCLUSAO
                        HAVING COUNT(DISTINCT tbl.ORIGEM) >= 2)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem certeza de que existem registros que atendem ?

select tbl.DT_INCLUSAO
from TB_GPS gps where tbl.USUARIO = xx
AND tbl.NM_CNPJ = 'xx.xxx.xxx/xxxx-xx'
AND tbl.DT_INCLUSAO BETWEEN CURDATE() - INTERVAL 30 DAY AND
CURDATE()
AND tbl.REGISTRO =1
AND tbl.ORIGEM IN (1,2)
GROUP BY tbl.DT_INCLUSAO
HAVING COUNT(DISTINCT tbl.ORIGEM) >= 2

retorna algo para o cnpj em questão ?

 

tbl.DT_INCLUSAO contém data e hora ?

Talvez seja precisa truncar a data

Compartilhar este post


Link para o post
Compartilhar em outros sites

OOOOOO senhor da glória até que enfim !!! era isso mesmo , formatei a data

 

DATE_FORMAT(gps.DT_INCLUSAO,'%Y-%m-%d')

 

 

e funcionou amigo, muito obrigadoooooo !!! Salvou meu dia rsrsrsrsrs

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.