Ir para conteúdo

Arquivado

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

Hiccup

MAX com Join

Recommended Posts

Boa tarde,

 

Estou com uma dificuldade com a função MAX(). Olhei outros tópicos, mas não consegui encontrar algum que me ajudasse na solução.

 

Eu preciso fazer uma consulta, combinando duas tabelas, que me retorne a linha mais atual. Eu montei o script abaixo:

 

SELECT MAX(NFE.DT_EMISSAO),

NFE.CHAVE_ORIGEM,

STATUS.STATUS

FROM NFE_DOF_STATUS STATUS,

NFE_DOF NFE

WHERE STATUS.NFE_ID = NFE.ID

AND STATUS.SERVICO = 'EMISSAO'

AND NFE.TIPO <> '0'

AND NFE.CHAVE_ORIGEM = '72324351001'

group by NFE.CHAVE_ORIGEM, STATUS.STATUS

 

Ele me retorna duas linhas:

 

DT_EMISSAO CHAVE_ORIGEM STATUS

02/abr/15 72324351001 REJEITADA_SEFAZ

07/abr/15 72324351001 AUTORIZADA

 

Se eu retirar a coluna STATUS, ele retorna apenas uma linha, mas aí é que está o problema, essa é a coluna mais importante para a minha análise:

 

SELECT MAX(NFE.DT_EMISSAO),

NFE.CHAVE_ORIGEM

FROM NFE_DOF_STATUS STATUS,

NFE_DOF NFE

WHERE STATUS.NFE_ID = NFE.ID

AND STATUS.SERVICO = 'EMISSAO'

AND NFE.TIPO <> '0'

AND NFE.CHAVE_ORIGEM = '72324351001'

group by NFE.CHAVE_ORIGEM

 

DT_EMISSAO CHAVE_ORIGEM

07/abr/15 72324351001

 

Alguém poderia me ajudar a entender o que está acontecendo e se tem uma forma de listar apenas uma linha mantendo a coluna STATUS?!

 

Até mais,

Hiccup

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde,

Estou com uma dificuldade com a função MAX(). Olhei outros tópicos, mas não consegui encontrar algum que me ajudasse na solução.

Eu preciso fazer uma consulta, combinando duas tabelas, que me retorne a linha mais atual. Eu montei o script abaixo:

SELECT MAX(NFE.DT_EMISSAO),
    NFE.CHAVE_ORIGEM,
    STATUS.STATUS
     FROM NFE_DOF_STATUS STATUS,
    NFE_DOF NFE
    WHERE STATUS.NFE_ID     = NFE.ID
  AND STATUS.SERVICO        = 'EMISSAO'
  AND NFE.TIPO              <> '0'
  AND NFE.CHAVE_ORIGEM      = '72324351001'
    group by NFE.CHAVE_ORIGEM, STATUS.STATUS


Ele me retorna duas linhas:

DT_EMISSAO CHAVE_ORIGEM STATUS
02/abr/15 72324351001 REJEITADA_SEFAZ
07/abr/15 72324351001 AUTORIZADA

Se eu retirar a coluna STATUS, ele retorna apenas uma linha, mas aí é que está o problema, essa é a coluna mais importante para a minha análise:

SELECT MAX(NFE.DT_EMISSAO),
    NFE.CHAVE_ORIGEM
     FROM NFE_DOF_STATUS STATUS,
    NFE_DOF NFE
    WHERE STATUS.NFE_ID     = NFE.ID
  AND STATUS.SERVICO        = 'EMISSAO'
  AND NFE.TIPO              <> '0'
  AND NFE.CHAVE_ORIGEM      = '72324351001'
    group by NFE.CHAVE_ORIGEM
DT_EMISSAO CHAVE_ORIGEM
07/abr/15 72324351001


Alguém poderia me ajudar a entender o que está acontecendo e se tem uma forma de listar apenas uma linha mantendo a coluna STATUS?!

Até mais,
Hiccup

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tem jeito pois o max vai agrupar para cada linha distinta , tendo mais de um STATUS vão aparecer duas linhas.

 

Atente que a data também interfere.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta,

Bom, então vou pensar em outra forma para montar o relatório.

Obrigado pela ajuda ... :)

 

Até mais,

Hiccup

 

PS.: Por favor, o tópico já pode ser fechado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente algo assim ....

SELECT *
     FROM NFE_DOF_STATUS STATUS,
    NFE_DOF NFE
    WHERE STATUS.NFE_ID     = NFE.ID
  AND STATUS.SERVICO        = 'EMISSAO'
  AND NFE.TIPO              <> '0'
  AND NFE.CHAVE_ORIGEM      = '72324351001'
 
  AND NFE.DT_EMISSAO = (SELECT MAX(NFE.DT_EMISSAO)
                        FROM NFE_DOF_STATUS STATUS2,
                        NFE_DOF NFE2
                        WHERE STATUS2.NFE_ID     = NFE2.ID
                        AND STATUS2.SERVICO        = STATUS.SERVICO
                        AND NFE2.TIPO              <> '0'
                        AND NFE2.CHAVE_ORIGEM      = NFE.CHAVE_ORIGEM)

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta,

 

Deu certo, tive que mexer mais um pouco para atingir o resultado desejado, mas a sua lógia foi quem resolver o problema. Muito obrigado!!! :clap:

 

Acho que vou ter que estudar bastante lógica agora que estou iniciando no PL/SQL ... :)

 

Até mais,

Hiccup

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.