Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola pessoal do iMasters. 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!
Código:
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;
Obrigado!
Que honra ser respondido logo por um moderador! =)
Vou testar aqui, depois posto o retorno, positivo ou negativo.
Muito obrigado!
Testei aqui a query sugerida pelo motta, e ainda to caindo na mesma questao. Ela pega todos os momentos em que o status da decsts esta como X, e a finalidade dela e pegar somente quando X for o status mais atual...
Eu to tentando aqui, mas esta meio dificil, query bem chatinha essa.
Obrigado!
Moderador é só um Membro com algumas permissões a mais ...
Tenta isto ...
SELECT percod permissor, decnroser decoder, decfch data_status, decode(decsts,'X','não retornado',decsts) decoder_status
FROM
decode_log dl
WHERE
decsts = 'X'
AND decfch < (sysdate - 5)
AND decfch = (SELECT MAX(decfch )
FROM
decode_log dl2
WHERE dl2.percod = dl.percod
AND dl2.decsts = 'X'
AND dl2.decfch < (sysdate - 5))
ORDER BY percod ASC;
Supondo que percod seja a chave da tabela em questão, vai pegar a maior data de cada chave.
Obrigado, mais uma vez, motta!
Testei aqui, e ela se aproximou bem do resultado preterido, acho que a falha esta no BIOS na ponta de mesa... haha
Essa tabela possui um campo de id que e sequencial... Isso teria alguma utilidade/relevancia para a query em questao?!
Obrigado!
A ideia básica é igualar a(s) chave(s) primária(s) do select com a da subquery.
Exemplo mais simples
Post mais recente por usuário do fórum
posts
-----
idusuario (pk)
idpost (pk)
data
select idusuario,idpost,data
from posts p1
where p1.idpost = (select max(p2.idpost)
from posts p2
where p2.idusuario = p1.idusuario)Ajudou ?
Ajudou sim, cara, nao tenho como te agradecer o suficiente!
Vou deixar isso como truque na manga caso necessite!
Obrigado motta!
Droga... Ainda nao consigo obter os resultados desejados, ainda escapam alguns que ja mudaram de status...
Eu preciso pegar os que possuem o status X a mais de 5 dias e ainda permanecem com esse status X.
Obrigado!
>
... Eu preciso pegar os que possuem o status X a mais de 5 dias e ainda permanecem com esse status X. ...
Não entendi, qual a regra para saber isto ?!
Bom dia motta!
Vou dar um exemplo.
Um dia o técnico coloca o status do decoder como X ( nao retornado ), só que ele pode alterar isso de acordo com a evolução do caso, para outros status. Porém, eu quero pegar os decoders que não mudaram do status X dentro do periodo de 5 dias.
Engraçado é que eu tenho conseguido fazer isso com uma query simples, só que ela me retorna também alguns casos em que o status do decoder já mudou o status.
Query em questão:
select percod permissor, decnroser decoder, decfch data_status, decode(decsts,'X','nao retornado',decsts) decoder_status
from decode_log
where decsts = 'X'
and(decsts != 'R' or decsts != 'S' or decsts != 'A' or decsts != 'E' or decsts != 'C')
and decfch > (sysdate - 5)
order by decsts desc;
Aquela que você sugeriu, está me servindo também, mas em outra ponta.
Obrigado!
Pelo que entendi terá de ser feito uma subquery.
select percod permissor, decnroser decoder, decfch data_status, decode(decsts,'X','nao retornado',decsts) decoder_status
from decode_log dl
where decsts = 'X'
and dl.decfch > (sysdate - 5)
and not exists (select null
from decode_log dl2
where dl2.percod = dl.percod
and (dl2.decsts in ('R','S','A','E','C')
and dl2.decfch > (sysdate - 5))
order by decsts desc;Obrigado mais uma vez, Motta!
Essa query não funcionou, na verdade, ela não retornou nenhum valor.
Vou continuar tentando aqui.
Obrigado!
Creio que ...
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)