Selecionar a maior data

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
jedi_pereira
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Ter, 04 Dez 2007 2:12 pm
Localização: São Carlos - SP

olá

dada a seguinte PL/SQL:

Selecionar tudo

SELECT DISTINCT OFOBJOFICINA.IDOBJOF Código, OFOBJOFICINA.IDOBJOF2 Placa, 
                TFAB.NOME Marca, OFMODELO.MODELO Modelo, 
                OFSUBMODELO.DESCRICAO SubModelo, OFOBJOFICINA.ANOFABR Ano,
                substr(GDEPTO.NOME,1,3) Obra
                
  FROM OFOBJOFICINA INNER JOIN OFTIPOOBJ 
    ON (OFOBJOFICINA.IDTIPOOBJ = OFTIPOOBJ.IDTIPOOBJ) INNER JOIN OFMODELO 
    ON (OFTIPOOBJ.IDTIPOOBJ = OFMODELO.IDTIPOOBJ) INNER JOIN OFSUBMODELO 
    ON (OFMODELO.IDTIPOOBJ = OFSUBMODELO.IDTIPOOBJ AND 
        OFMODELO.CODMODELO = OFSUBMODELO.CODMODELO) INNER JOIN OFAPROPRIACAOPRD 
    ON (OFOBJOFICINA.CODCOLIGADA = OFAPROPRIACAOPRD.CODCOLIGADA AND 
        OFOBJOFICINA.IDOBJOF = OFAPROPRIACAOPRD.IDOBJOF) INNER JOIN GDEPTO
    ON (OFAPROPRIACAOPRD.CODCOLIGADA = GDEPTO.CODCOLIGADA AND 
        OFAPROPRIACAOPRD.CODFILIAL = GDEPTO.CODFILIAL AND
        OFAPROPRIACAOPRD.CODDEPARTAMENTO = GDEPTO.CODDEPARTAMENTO) INNER JOIN TFAB
    ON (OFMODELO.CODCOLFAB = TFAB.CODCOLIGADA AND
        OFMODELO.CODFAB = TFAB.CODFAB)
        
 WHERE (OFOBJOFICINA.CODCOLIGADA = 1
   AND  OFOBJOFICINA.CODMODELO = OFMODELO.CODMODELO
   AND  OFOBJOFICINA.CODSUBMODELO = OFSUBMODELO.CODSUBMODELO
   AND  OFTIPOOBJ.IDTIPOOBJ = OFOBJOFICINA.IDTIPOOBJ
   AND  OFOBJOFICINA.IDOBJOF LIKE 'CB001'||'%'
   AND  OFAPROPRIACAOPRD.DATAAPROPRIACAO BETWEEN '01/10/2007' AND '21/12/2007')
isso retorna 3 valores "iguais", a unica diferença é Obra
exemplo:

Selecionar tudo

CÓDIGO               PLACA                MARCA                                    MODELO                         SUBMODELO                 ANO                    OBRA 
-------------------- -------------------- ---------------------------------------- ------------------------------ ------------------------- ---------------------- ---- 
CB001                DBP-4956             VOLKSWAGEN                               VIGA                           17.220                    2005                   DAN  
CB001                DBP-4956             VOLKSWAGEN                               VIGA                           17.220                    2005                   MAN  
CB001                DBP-4956             VOLKSWAGEN                               VIGA                           17.220                    2005                   PAT 

eu quero mostrar só a última locação em Obra, ou seja, a Obra que tiver a maior data
fica na tabela OFAPROPRIACAOPRD.DATAEMISSAO

tentei um Group By (OF....DATAEMISSAO) Having Max (OF....DATAEMISSAO), mas não deu certo
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

E ai Jedi beleza?

cara, eu fiz uma mudança no select, coloquei o RANK() ordernando a data descrescente, a unica duvida é ver se não vai dar erro por causa do join. Tenta rodar ai e da um retorno depois.

Selecionar tudo

SELECT * 
  FROM (SELECT DISTINCT OFOBJOFICINA.IDOBJOF Código, OFOBJOFICINA.IDOBJOF2 Placa, 
                        TFAB.NOME Marca, OFMODELO.MODELO Modelo, 
                        OFSUBMODELO.DESCRICAO SubModelo, OFOBJOFICINA.ANOFABR Ano, 
                        substr(GDEPTO.NOME,1,3) Obra ,
                        RANK() OVER (ORDER BY OFAPROPRIACAOPRD.DATAEMISSAO DESC) rank
          FROM OFOBJOFICINA INNER JOIN OFTIPOOBJ 
            ON (OFOBJOFICINA.IDTIPOOBJ = OFTIPOOBJ.IDTIPOOBJ) INNER JOIN OFMODELO 
            ON (OFTIPOOBJ.IDTIPOOBJ = OFMODELO.IDTIPOOBJ) INNER JOIN OFSUBMODELO 
            ON (OFMODELO.IDTIPOOBJ = OFSUBMODELO.IDTIPOOBJ AND 
                OFMODELO.CODMODELO = OFSUBMODELO.CODMODELO) INNER JOIN OFAPROPRIACAOPRD 
            ON (OFOBJOFICINA.CODCOLIGADA = OFAPROPRIACAOPRD.CODCOLIGADA AND 
                OFOBJOFICINA.IDOBJOF = OFAPROPRIACAOPRD.IDOBJOF) INNER JOIN GDEPTO 
            ON (OFAPROPRIACAOPRD.CODCOLIGADA = GDEPTO.CODCOLIGADA AND 
                OFAPROPRIACAOPRD.CODFILIAL = GDEPTO.CODFILIAL AND 
                OFAPROPRIACAOPRD.CODDEPARTAMENTO = GDEPTO.CODDEPARTAMENTO) INNER JOIN TFAB 
            ON (OFMODELO.CODCOLFAB = TFAB.CODCOLIGADA AND 
                OFMODELO.CODFAB = TFAB.CODFAB) 
                
         WHERE (OFOBJOFICINA.CODCOLIGADA = 1 
           AND  OFOBJOFICINA.CODMODELO = OFMODELO.CODMODELO 
           AND  OFOBJOFICINA.CODSUBMODELO = OFSUBMODELO.CODSUBMODELO 
           AND  OFTIPOOBJ.IDTIPOOBJ = OFOBJOFICINA.IDTIPOOBJ 
           AND  OFOBJOFICINA.IDOBJOF LIKE 'CB001'||'%' 
           AND  OFAPROPRIACAOPRD.DATAAPROPRIACAO BETWEEN '01/10/2007' AND '21/12/2007')
        )
 WHERE RANK = 1
[]'s!!
jedi_pereira
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Ter, 04 Dez 2007 2:12 pm
Localização: São Carlos - SP

deu certo sim

muito obrigado

nem sabia dessa de RANK
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes