Como selecionar apena o ultimo status de um campo.

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
torden
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Dom, 24 Jul 2011 9:17 am
Localização: Rio de Janeiro/RJ

Ola pessoal do glufke. No momento eu tenho que desenvolver uma pequena query que me retornara um status especifico que fica registrado em um campo da tabela. não consegui encontrar nada na busca.

Ate ai, tranquilo, sem problemas... So que... Essa tabela possui uma trigger atrelada e isso faz com que esse mesmo campo mude.

Exemplo.

O status ontem era X, hoje passou para Y.
Nessa mudanca, esta trigger gera um registro pra X e outro pra Y, e como já podem ter notado, esse campo e diretamente ligado a data.

A minha duvida fica em como pegar o registro somente quando o status mais recente for X, e eu preciso realizar essa busca em SYSDATE - 5 tambem.

Muito obrigado pessoal!

Selecionar tudo

SELECT percod permissor, decnroser decoder, decfch data_status, decode(decsts,'X','não retornado',decsts) decoder_status
FROM 
decode_log
WHERE 
decsts = 'X'
AND decfch < (sysdate - 5)
ORDER BY percod ASC;
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

no where você faz uma consulta na proprio tabela pegando o MAX(

e poem where coluna = (select max(
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Bom, para buscar a posição de 5 dias atrás faria isto:

Selecionar tudo

/* Posição passada */
/* P_DATA deve receber Sysdate - 5 por exemplo */
Select d1.percod permissor,
       d1.decnroser decoder,
       d1.decfch data_status,
       decode(d1.decsts, 'X', 'não retornado', d1.decsts) decoder_status
  From decode_log d1
 Where d1.decfch = P_DATA
 Order By d1.percod Asc;
Já para buscar a posição atual faria assim:

Selecionar tudo

/* Ultima posição */

Select d1.percod permissor,
       d1.decnroser decoder,
       d1.decfch data_status,
       decode(d1.decsts, 'X', 'não retornado', d1.decsts) decoder_status
  From decode_log d1
 Where d1.decfch = (Select max(decfch)
                   From decode_log d2
                  Where d2.percod = d1.percod
                    And d2.decnroser = d1.decnroser)
 Order By d1.percod Asc;
E para buscar a ultima data em que a posição fosse "X" faria assim:

Selecionar tudo

/* Ultima posição X */

Select d1.percod permissor,
       d1.decnroser decoder,
       d1.decfch data_status,
       decode(d1.decsts, 'X', 'não retornado', d1.decsts) decoder_status
  From decode_log d1
 Where d1.decfch = (Select max(decfch)
                   From decode_log d2
                  Where d2.decsts = 'X'
                    And d2.percod = d1.percod
                    And d2.decnroser = d1.decnroser)
 Order By d1.percod Asc;
Considerações:
-Desconhecendo o negócio,o resultado esperado e os parâmetros já existentes simulei o melhor possivel.
-Estes selects apresentados podem não realizar totalmente suas nescessidades, o adapte para isto.

Qualquer duvida estamos a disposição.
Responder
  • Informação
  • Quem está online

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