Torden 0 Denunciar post Postado Julho 24, 2011 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; Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 24, 2011 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) AND decfch = (SELECT MAX(decfch ) FROM decode_log dl2 WHERE dl2.decsts = 'X' AND dl2.decfch < (sysdate - 5)) ORDER BY percod ASC; Compartilhar este post Link para o post Compartilhar em outros sites
Torden 0 Denunciar post Postado Julho 24, 2011 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! Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 24, 2011 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. Compartilhar este post Link para o post Compartilhar em outros sites
Torden 0 Denunciar post Postado Julho 24, 2011 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! Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 25, 2011 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) order by idusuario Ajudou ? Compartilhar este post Link para o post Compartilhar em outros sites
Torden 0 Denunciar post Postado Julho 25, 2011 Ajudou sim, cara, nao tenho como te agradecer o suficiente! Vou deixar isso como truque na manga caso necessite! Obrigado motta! Compartilhar este post Link para o post Compartilhar em outros sites
Torden 0 Denunciar post Postado Julho 25, 2011 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! Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 25, 2011 ... 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 ?! Compartilhar este post Link para o post Compartilhar em outros sites
Torden 0 Denunciar post Postado Julho 25, 2011 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! Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 25, 2011 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; Compartilhar este post Link para o post Compartilhar em outros sites
Torden 0 Denunciar post Postado Julho 25, 2011 Obrigado mais uma vez, Motta! Essa query não funcionou, na verdade, ela não retornou nenhum valor. Vou continuar tentando aqui. Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites