Ir para conteúdo

POWERED BY:

Arquivado

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

luan_alves

select com valores identicos

Recommended Posts

Bom dia á todos,

 

Estou com uma dúvida em uma consulta no banco.

 

Conforme a imagem abaixo, tenho uma tabela onde faço um histórico de ativações de "parceiros".

Eu gostaria de contar "COUNT" , quantos usuários tem na tabela com a informação "ativado=0" , mas como podem perceber os usuários podem ter várias informações deste tipo, então as regras seriam.

 

  1. idparceiros não podem se repetir (GROUP BY).
  2. Temos que selecionar a última instrução de cada idparceiro se for igual a 0 contabiliza, caso contrário não.
  3. Só poderemos contabilizar o idparceiros uma única vez.

Já tentei utilizando HAVING, DISTINCT e etc.. , e não faço idéia de como resolver este problema.

 

 

sql.png

 

Para quem quiser criar a tabela com as informações contidas, segue abaixo o sql.

 

CREATE TABLE `parceiros_blacklist` (
`idparceiros_blackList` int(11) NOT NULL AUTO_INCREMENT,
`idparceiros` int(11) DEFAULT NULL,
`idusuario` int(11) DEFAULT NULL,
`data` datetime DEFAULT NULL,
`ativado` int(11) DEFAULT NULL,
`descricao` longtext,
`data_alteracao` timestamp NULL DEFAULT NULL,
`data_criacao` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`idparceiros_blackList`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8;
LOCK TABLES `parceiros_blacklist` WRITE;
/*!40000 ALTER TABLE `parceiros_blacklist` DISABLE KEYS */;
INSERT INTO `parceiros_blacklist` VALUES (25,140,1,NULL,0,'teste',NULL,'2013-09-11 12:08:29'),(26,140,1,NULL,1,'teste 2',NULL,'2013-09-11 12:08:46'),(27,140,1,NULL,0,'teset 3',NULL,'2013-09-11 12:09:05'),(28,139,1,NULL,0,'teste 2_1',NULL,'2013-09-11 12:09:28'),(29,139,1,NULL,1,'teste 2_2',NULL,'2013-09-11 12:09:56'),(30,139,1,NULL,0,'teste 2_3',NULL,'2013-09-11 12:09:56');
UNLOCK TABLES;

Compartilhar este post


Link para o post
Compartilhar em outros sites
select count(distinct /*coloque aqui a coluna que deseja contar*/) from parceiros_blacklist as a(select id_parceiro,max(data_criacao) as data from parceiros_blacklist

group by id_oparceiro) as b

where a.data_criacao = b.data

and idparceiro = 0

Acredito que seja algo parecido com isso..não entendi muito bem a sua duvida

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

select count(distinct /*coloque aqui a coluna que deseja contar*/) from parceiros_blacklist as a(select id_parceiro,max(data_criacao) as data from parceiros_blacklist

group y id_oparceiro) as b

where a.data_criacao = b.data

and idparceiro = 0

Acredito que seja algo parecido com isso..não entendi muito bem a sua duvida

 

Fabiano ,

Estou com problema para utilizar a sua query, o seu subselect não esta sendo executado. você poderia me ajudar ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual erro que da? Eu escrevi group by errado, se der algum erro, tenta posta-lo..

 

Eu deixei da seguinte forma

 

select count(distinct idparceiros) 
from parceiros_blacklist as a 
(select idparceiros,max(idparceiros_blacklist) as data from parceiros_blacklist group by idparceiros) as b
where a.data_criacao = b.data
and idparceiros = 0

Da erro no subselect.

E a idéia é contar a quantidade de "idparceiros" que tenham a coluna "ativado" com o valor "0 (zero)" . Mas como esta é uma tabela de históricos , as informações se repetem diversas vezes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E a idéia é contar a quantidade de "idparceiros" que tenham a coluna "ativado" com o valor "0 (zero)" .

 

 

select idparceiros
from idparceiros
where ativado = '0'
group by idparceiros
having count(*) > 0

é isto /!

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

select idparceiros
from idparceiros
where ativado = '0'
group by idparceiros
having count(*) > 0

é isto /!

 

Quase, isso eu já havia feito.

Eu preciso do total, o resultado desta consulta são 2 linhas, eu preciso deste resultado na consulta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu preciso do total, o resultado desta consulta são 2 linhas, eu preciso deste resultado na consulta.

 

Não entendi, quantos ?

 

select count(*) qtd
from (select idparceiros 
      from idparceiros 
      where ativado = '0' 
      group by idparceiros 
      having count(*) > 0) virtual

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Não entendi, quantos ?

 

select count(*) qtd
from (select idparceiros 
      from idparceiros 
      where ativado = '0' 
      group by idparceiros 
      having count(*) > 0) virtual

 

Mota,

 

E quase isso.

 

Terei de verificar o último registro do "idparceiro" e verificar se a coluna "ativado" tem o valor igual a "0" , só se for igual a zero que podemos contabilizar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o

 

 

... 
where ativado = '0' 
...

não resolve

 

Não resolveu.

Porque eu retirei o último registro do idparceiros 139, e o resultado deveria ser 1, mas não resolveu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente uma subquery com max, se nao entender depois publico, respondo via tablet e é ruim de editar codigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente uma subquery com max, se nao entender depois publico, respondo via tablet e é ruim de editar codigo.

Irei tentar com uma subquery. Como o relatório não é algo para agora e sim para um futuro próximo vou finalizar a aplicação e depois fazer esta query. E posto a solução.

 

Obrigado á todos.

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.