Ir para conteúdo

POWERED BY:

Arquivado

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

Rodolfo TI

Consulta usando MAX e Group by

Recommended Posts

Meus amigos, mas uma vez venho ao socorro de vocês. rs

 

 

To com uma query aqui executando um select que funciona direitinho, porém surgiu uma nova necessidade, preciso agrupar pelo maior id.

 

Não sei como fazer pra mesclar os dois:

 

//estrutura da tabela
CREATE TABLE IF NOT EXISTS `pv` (
  `id_pv` int(11) NOT NULL auto_increment,
  `referencia_pv` varchar(50) collate latin1_general_ci NOT NULL default '',
  `numero_pv` varchar(100) collate latin1_general_ci NOT NULL default '',
  `data_pv` date default '0000-00-00',
  `ocm_pv` varchar(100) collate latin1_general_ci NOT NULL default '',
  `indice_pv` varchar(10) collate latin1_general_ci NOT NULL default '',
  `id_info_doc` int(11) NOT NULL default '0',
  `estado_produto` char(1) collate latin1_general_ci NOT NULL default '',
  `estado_processo` char(1) collate latin1_general_ci NOT NULL default '',
  `responsabilidade` char(1) collate latin1_general_ci NOT NULL,
  `fase_projeto` varchar(30) collate latin1_general_ci NOT NULL,
  `id_peca` int(11) NOT NULL,
  `evolucao_indice` int(11) NOT NULL default '0',
  `data_negativa` date NOT NULL,
  `cancelado` tinyint(1) default '0' ,
  `projeto` varchar(45) collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id_pv`)
) ;
 

 

o select que conta

 

 

 
select count(*) from pv where data_negativa='0000-00-00' AND CONCAT(estado_processo,estado_produto) = 'WE' AND projeto = 'NomeProjeto' AND cancelado=0
 

 

O problema é que tenho várias peças que podem ter um pv no mesmo dia e por esse motivo preciso pegar o maior id referente aquela peça consigo fazer isso

 

select max(id_pv) from pv where id_peca='x';

 

Como mesclar essas duas queries ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
select count(*) 
from pv 
where data_negativa='0000-00-00' 
AND CONCAT(estado_processo,estado_produto) = 'WE' 
AND projeto = 'NomeProjeto' 
AND cancelado=0
AND ID_PV = (select max(pv2.id_pv)                        
             from pv PV2 
             where PV2.id_peca=PV.ID_PV)

Entre outras soluções

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

select count(*) 
from pv 
where data_negativa='0000-00-00' 
AND CONCAT(estado_processo,estado_produto) = 'WE' 
AND projeto = 'NomeProjeto' 
AND cancelado=0
AND ID_PV = (select max(pv2.id_pv)                        
             from pv PV2 
             where PV2.id_peca=PV.ID_PV)

Entre outras soluções

 

Fala aí amigão obrigado pela tentativa, mas sempre retorna zero, o id_peca não precisa ser igual ao id_pv e tal,

 

vou explicar melhor,

 

preciso contar o que tem estado processo igual a W e estado produto E , mas somente o ultimo cadastrado, acho que vou ter que alterar a estrutura das tabelas, pois não tenho chaves e tal, preciso de alguma forma que uma peca tenha um pv e essa peça tenha um estado produto e um estado processo. mas pegar somente o ultimo pv, pensei em usar o código do pv pois sem que o maior é o mais recente

Compartilhar este post


Link para o post
Compartilhar em outros sites
select count(*) 
from pv 
where data_negativa='0000-00-00' 
AND CONCAT(estado_processo,estado_produto) = 'WE' 
AND projeto = 'NomeProjeto' 
AND cancelado=0 AND ID_PV = (select max(pv2.id_pv)                         
                             from pv PV2              
                             where PV2.id_peca=PV.id_peca)

Supondo que id_peca seja achave de pv

 




			
		

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

select count(*) 
from pv 
where data_negativa='0000-00-00' 
AND CONCAT(estado_processo,estado_produto) = 'WE' 
AND projeto = 'NomeProjeto' 
AND cancelado=0 AND ID_PV = (select max(pv2.id_pv)                         
                             from pv PV2              
                             where PV2.id_peca=PV.id_peca)

Supondo que id_peca seja achave de pv

 


show! é isso! obrigado.

 

quando você coloca

 

 

 
 

where PV2.id_peca=PV.id_peca)

 

 

o pv2 é por ser o nome dado anteriormente ao resultado da query ?

 

Dúvida resolvida.

 

 

@oFFTopoic: Mais importante que ter as dúvidas sanadas é entender como funciona para que depois de um tempo numa ocasião semelhante possamos agir corretamente, sem ter que criar um novo tópico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O PV2 é apenas uma garantia , como a tabela é referenciada 2 vezes na mesma query se ronomeia (alias) para maior clareza e certeza de compilação correta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O PV2 é apenas uma garantia , como a tabela é referenciada 2 vezes na mesma query se ronomeia (alias) para maior clareza e certeza de compilação correta.

 

Cara acho que ainda estou tendo um problema, se dou um select count das peças retorna um valor por exemplo 500 , se faço da outra forma e somo os valores ele da um valor maior, ou seja, creio eu que ele esteja fazendo o seguinte contando também se na mesma semana houve rmais de um estado. Consigo fazer a relação entre semanas direto no mysql , ou só no php ?

 

Ps.: A dúvida ainda é no mesmo sentido, devo abrir um novo tópico ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Publique os dois selects que dao diferente.

Um deles é esse mesmo que conseguimos acertar:

 

 

select count(*) from pv where data_negativa='0000-00-00' AND CONCAT(estado_processo,estado_produto) = 'WE' AND projeto = 'NomeProjeto' AND cancelado=0 AND ID_PV = (select max(pv2.id_pv) from pv PV2 where PV2.id_peca=PV.id_peca)

 

A tabela PV é ligada a peças

 

quando dou o select na tabela de peças

 

 

 
select count(*) from peca
 

 

retorna um valor x que deveria ser a soma do resultado da consulta na tabelas de pv's porém quando somo o resultado da consulta na tabela de pv's da diferente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas são diferentes mesmo , para checar faça :

 

select * from peca

 

exporte para uma planilha e faça as somas ou referencia cruzadas na planilha para checar usando os filtros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas são diferentes mesmo , para checar faça :

 

select * from peca

 

exporte para uma planilha e faça as somas ou referencia cruzadas na planilha para checar usando os filtros.

 

Fiz aqui e bateu , deu certinho

Pra selecionar os resultados que são vazios eu consigo usar o concat ?

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.