Rhicky Postado 27 de Maio de 2009 Tópicos Que Criei: 120 Tópicos/Dia: 0.02 Meu Conteúdo: 400 Conteúdo/Dia: 0.06 Reputação: 0 Pontos/Conquistas: 3.200 Conteúdo Resolvido: 0 Dias Ganho: 0 Status: Offline Idade: 44 Denunciar Compartilhar Postado 27 de Maio de 2009 Tenho um empregado que no cadastro de histórico de seção (PFHSTSEC), consta as seguintes datas de alteração de histórico: 13/01/2006 01/04/2009 01/10/2009 Preciso verificar em qual seção o empregado está ou estava em uma determinada data, para tanto, desenvolvi a SQL abaixo: ---------------------- SELECT A.CHAPA, SUBSTR(B.DESCRICAO, 1, 6) AS CR FROM PFHSTSEC A, PSECAO B WHERE A.CHAPA = '000663' AND A.CODCOLIGADA = 7 AND B.CODCOLIGADA = A.CODCOLIGADA AND TO_CHAR(A.DTMUDANCA, 'MM') = 04 AND TO_CHAR(A.DTMUDANCA, 'YYYY') = 2009 AND A.CODSECAO = B.CODIGO ---------------------- Quando passo o parâmetro do mês e ano que existe no histórico, o sistema traz o resultado certinho, porém, quando passo um mês e ano que não existe no histórico ele traz vazio. Preciso que a SQL verifique em qual CR o empregado estava no mês e ano informado. Por exemplo: Na SQL acima, o sistema está retornando valor, pois o empregado possui histórico de mudança de seção na data 01/04/2009, porém se eu passar a data 01/02/2009, o sistema retorna vazio, pois não existe histórico de mudança nesse período. O que deve ser alterado na SQL para tratar esta situação ? Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
lugao Postado 27 de Maio de 2009 Tópicos Que Criei: 61 Tópicos/Dia: 0.01 Meu Conteúdo: 659 Conteúdo/Dia: 0.10 Reputação: 1 Pontos/Conquistas: 3.883 Conteúdo Resolvido: 0 Dias Ganho: 1 Status: Offline Idade: 41 Denunciar Compartilhar Postado 27 de Maio de 2009 assim dá certo: select chapa,nome, codsecao = (select codsecao from pfhstsec hist1 where hist1.chapa = pfunc.chapa and dtmudanca = (select max(hist2.dtmudanca) from pfhstsec hist2 where hist2.chapa = hist1.chapa and hist2.dtmudanca <= '20090101')) from pfunc Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Rhicky Postado 27 de Maio de 2009 Tópicos Que Criei: 120 Tópicos/Dia: 0.02 Meu Conteúdo: 400 Conteúdo/Dia: 0.06 Reputação: 0 Pontos/Conquistas: 3.200 Conteúdo Resolvido: 0 Dias Ganho: 0 Status: Offline Idade: 44 Autor Denunciar Compartilhar Postado 27 de Maio de 2009 assim dá certo:select chapa,nome, codsecao = (select codsecao from pfhstsec hist1 where hist1.chapa = pfunc.chapa and dtmudanca = (select max(hist2.dtmudanca) from pfhstsec hist2 where hist2.chapa = hist1.chapa and hist2.dtmudanca <= '20090101')) from pfunc OK Lugão, deu certo. Obrigado. Aproveitando o post, agora preciso converter esta SQL para Oracle, alguém sabe informar como ficaria ? Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Carlos-am Postado 27 de Maio de 2009 Tópicos Que Criei: 0 Tópicos/Dia: 0 Meu Conteúdo: 2 Conteúdo/Dia: 0.00 Reputação: 0 Pontos/Conquistas: 10 Conteúdo Resolvido: 0 Dias Ganho: 0 Status: Offline Idade: 46 Denunciar Compartilhar Postado 27 de Maio de 2009 OK Lugão, deu certo. Obrigado.Aproveitando o post, agora preciso converter esta SQL para Oracle, alguém sabe informar como ficaria ? Rhicky, Veja se desta forma atende você: select chapa,nome, (select codsecao from pfhstsec hist1 where hist1.chapa = pfunc.chapa and dtmudanca in (select max(hist2.dtmudanca) from pfhstsec hist2 where hist2.chapa = hist1.chapa and hist2.dtmudanca <= to_date('20090101', 'yyyymmdd'))) as "codsecao" from pfunc Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Posts Recomendados
Participe da conversa
Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.