Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Prezados boa tarde.
Eu fiz a seguinte consulta
SELECT PROCESSOS.NPROCESSO, FASE.FASE,TIPO.TIPO, FASES.DATA
FROM PROCESSOS
INNER JOIN (FASE INNER JOIN (TIPO INNER JOIN FASES ON TIPO.CODTIPO = FASES.CODTIPO) ON FASE.CODFASE = FASES.CODFASE) ON PROCESSOS.NPROCESSO = FASES.NPROCESSO
ORDER BY FASES.DATA DESC
Onde a mesma me retornar todos o processos ordenando pela maior data
PROCESSO FASE TIPO DATA
1001 FINAL PLANO 19/09/2013
1002 ELABORACAO PLANO 10/07/2012
1003 CONCESSAO RELATORIO 25/05/1999
Sendo que pode ocorrer de um mesmo processo ter diversas fases, pois ele banco de dados guarda todo histórico do processo.
PROCESSO FASE TIPO DATA
1001 FINAL PLANO 19/09/2013
1001 ELABORACAO PLANO 10/09/2013
1001 CONCESSAO RELATORIO 20/08/2013
Eu queria demonstrar a apenas ultima fase de cada processo, ou seja, a maior data de cada processo.
Do mais grato desde já pela ajuda.
Vinicius boa tarde
Mas eu fiz o que você falou e não deu certo. Seria assim?
SELECT PROCESSOS.NPROCESSO, FASE.FASE, TIPO.TIPO, Max(FASES.DATA)
FROM TIPO INNER JOIN (FASE INNER JOIN (PROCESSOS INNER JOIN FASES ON PROCESSOS.NPROCESSO = FASES.NPROCESSO) ON FASE.CODFASE = FASES.CODFASE) ON TIPO.CODTIPO = FASES.CODTIPO
GROUP BY PROCESSOS.NPROCESSO, FASE.FASE, TIPO.TIPO, FASES.DATA
Pois quando eu deixo apenar o GROUP BY PROCESSOS.NPROCESSO, está dando erro e pedo para entrar com as outras funções agregadoras.
SELECT PROCESSOS.NPROCESSO, FASE.FASE, TIPO.TIPO, Max(FASES.DATA)
FROM TIPO INNER JOIN (FASE INNER JOIN (PROCESSOS INNER JOIN FASES ON PROCESSOS.NPROCESSO = FASES.NPROCESSO) ON FASE.CODFASE = FASES.CODFASE) ON TIPO.CODTIPO = FASES.CODTIPO
GROUP BY PROCESSOS, FASE, TIPO
Agora rodou mas ainda não está na solução que estou querendo, ver o resultado:
PROCESSO_FASE
NPROCESSO FASE TIPO Expr1003
1001 Pesquisa Pesquisa 05/10/1945
1001 Pesquisa Pesquisa Positivo 07/10/1947
1001 Final Publicada 25/06/1949
1001 Concessão Aproveitamento 14/11/1947
1001 Concessão Protocolizado 06/11/1948
1002 Concessão Renovado 24/04/1948
1002 Concessão Pesquisa 27/10/1945
1002 Elaboração Parcial 11/12/1947
1002 Final Pesquisa 27/04/1950
1002 Elaboração Publicada 21/08/1962
1003 Elaboração Plano 23/06/1951
1003 Elaboração Protocolizado 27/09/1955
1003 Concessão Pesquisa 22/07/1968
1003 Concessão Final 20/07/1970
1003 Final Publicada 03/11/1978
Resultado Esperado
PROCESSO_FASE
NPROCESSO FASE TIPO Expr
1001 Final Publicada 25/06/1949
1002 Final Pesquisa 27/04/1950
1003 Final Publicada 03/11/1978
Motta boa tarde
Eu não sou um usuário tão avançado assim :sick: , não estou conseguindo fazer este tipo de subselect.
Teria como me ajudar em como ficaria mais ou menos a consulta?
Do mais grato desde já.
+ou-
select PROCESSO,FASE,TIPO,DATA
from processos p1
where p1.data = (select max(DATA)
from processos p2
where p2.processo = p1.processo)Motta boa tarde
Agora rodou mas mostrou o processo com data mais atual, segue como fiz
SELECT PROCESSOS.NPROCESSO, FASE.FASE, TIPO.TIPO, FASES.DATA
FROM PROCESSOS INNER JOIN (FASE INNER JOIN (TIPO INNER JOIN FASES ON TIPO.CODTIPO = FASES.CODTIPO) ON FASE.CODFASE = FASES.CODFASE) ON PROCESSOS.NPROCESSO = FASES.NPROCESSO
WHERE FASES.DATA = (SELECT MAX(FASES.DATA) FROM PROCESSOS INNER JOIN (FASE INNER JOIN (TIPO INNER JOIN FASES ON TIPO.CODTIPO = FASES.CODTIPO) ON FASE.CODFASE = FASES.CODFASE) ON PROCESSOS.NPROCESSO = FASES.NPROCESSO)
O que está errado?
Do mais grato desde já
Não entendi este inner join
É o relacionamento das tabelas, ao qual eu acesso as datas.
Não precisa adicionar? pois só consegui rodar desta forma
tem como mandar a estrutura das tabelas envolvidas?
Att.
Motta bom dia
Consegui resolver. Pois o Inner Join da FASES.DATA é feito para eu poder relacionar a data do processo com a data de sua ultima atualização por isso adicionei do Where. Segue como ficou o código:
SELECT PROCESSOS.NPROCESSO, FASE.FASE, TIPO.TIPO, FASES.DATA
FROM PROCESSOS INNER JOIN (FASE INNER JOIN (TIPO INNER JOIN FASES ON TIPO.CODTIPO = FASES.CODTIPO) ON FASE.CODFASE = FASES.CODFASE) ON PROCESSOS.NPROCESSO = FASES.NPROCESSO
WHERE FASES.DATA = (SELECT MAX(FASES.DATA) FROM FASES WHERE PROCESSOS.NPROCESSO = FASES.NPROCESSO)
A.jr e Vinicius muito obrigado pela ajuda;.
da um group by por processo e usa o max na data