none
Selecionar código do registro de uma tabela de histórico baseado em um período RRS feed

  • Pergunta

  • Pessoal,

    Boa tarde!

    Tenho uma tabela de histórico de locação de funcionários e preciso selecionar os registros de cálculo de um determinado Mês e Ano de Competência e no campo de locação exibir o código de locação onde o funcionário estava naquele mês/ano.

    Exemplo:

    Registro de Histórico de Locação

    Funcionário 01 - Locação 001 - 01/04/2008

    Funcionário 01 - Locação 005 - 20/05/2011

    Funcionário 01 - Locação 006 - 17/01/2013

    Registro de Histórico de Cálculo

    Funcionário 01 - Valor do Cálculo - X - 05/04/2008

    Funcionário 01 - Valor do Cálculo - X - 01/06/2008

    Funcionário 01 - Valor do Cálculo - X - 10/03/2011

    Funcionário 01 - Valor do Cálculo - X - 10/06/2011

    Funcionário 01 - Valor do Cálculo - X - 21/07/2013

    Onde X deve ser a Locação, ou seja, ficaria da seguinte forma:

    Funcionário 01 - Valor do Cálculo - 001 - 05/04/2008

    Funcionário 01 - Valor do Cálculo - 001 - 01/06/2008

    Funcionário 01 - Valor do Cálculo - 001 - 10/03/2011

    Funcionário 01 - Valor do Cálculo - 005 - 10/06/2011

    Funcionário 01 - Valor do Cálculo - 006 - 21/07/2013

    Com a minha consulta o resultado está sendo:

    Funcionário 01 - Valor do Cálculo - 001 - 05/04/2008

    Funcionário 01 - Valor do Cálculo - 001 - 01/06/2008

    Funcionário 01 - Valor do Cálculo - 001 - 10/03/2011

    Funcionário 01 - Valor do Cálculo - 001 - 10/06/2011

    Funcionário 01 - Valor do Cálculo - 005 - 10/06/2011

    Funcionário 01 - Valor do Cálculo - 001 - 21/07/2013

    Funcionário 01 - Valor do Cálculo - 005 - 21/07/2013

    Funcionário 01 - Valor do Cálculo - 006 - 21/07/2013

    Minha consulta sql:

    SELECT FE.CHAPA RT_MAT,
    FE.VALOR RT_VALOR,
    S.CODSECAO RT_CC,
    FE.MESCOMP,
    FE.ANOCOMP
    FROM PFENCARGO FE INNER JOIN PENCARGO E ON FE.CODENCARGO = E.CODIGO
    INNER JOIN PFHSTPROV P ON FE.CHAPA = P.CHAPA AND FE.ANOCOMP = P.ANO AND FE.MESCOMP = P.MES
    INNER JOIN PFHSTSEC S ON FE.CHAPA = S.CHAPA
    WHERE FE.CODENCARGO IN ('0004','0005','0006','0007','0008','0009')
    AND (
      (YEAR(S.DTMUDANCA) = FE.ANOCOMP
    AND (MONTH(S.DTMUDANCA) = FE.MESCOMP OR MONTH(S.DTMUDANCA) < FE.MESCOMP))
    OR 
      (YEAR(S.DTMUDANCA) < FE.ANOCOMP AND MONTH(S.DTMUDANCA) > FE.MESCOMP)
    )
    ORDER BY
    FE.CHAPA, FE.ANOCOMP, FE.MESCOMP, FE.CODENCARGO

    sexta-feira, 29 de maio de 2015 17:09

Respostas

Todas as Respostas

  • Deleted
    sexta-feira, 29 de maio de 2015 17:23
  • José, obrigada pela sugestão.

    Mas no meu caso eu não tenho a data para a comparação tenho mês e ano de competência separados, o que dificulta um pouco, pois tenho que testar:

    YEAR(HL.DTMUDANCA) com HC.ANOCOMP e MONTH(HL.DTMUDANCA) com HC.MESCOMP

    Já passou por algo assim?

    sexta-feira, 29 de maio de 2015 19:37
  • Deleted
    • Marcado como Resposta Camila Reis sexta-feira, 29 de maio de 2015 21:31
    sexta-feira, 29 de maio de 2015 20:22
  • José,

    Nossa já ajudou bastante. Mas tem um porém, eu  não posso comparar a data e fixar que deve estar no mês e ano de competência, pois nem sempre terei uma mudança na data de competência do cálculo.

    Preciso preencher essa informação também para os registros que não estão no mês e ano da mudança.

    Deu pra entender?

    Mais uma vez, muito obrigada pelo apoio!

    sexta-feira, 29 de maio de 2015 20:52
  • José, muitíssimo obrigada!!!!!

    As tabelas mencionadas não eram necessárias nessa consulta.

    Resolveu me problema! :)

    sexta-feira, 29 de maio de 2015 21:30
  • Deleted
    sexta-feira, 29 de maio de 2015 21:38
  • Deleted
    sexta-feira, 29 de maio de 2015 21:56

  • Dúvidas que persistem:

    • Para um determinado funcionário pode existir mais de uma linha na tabela Histórico de Cálculo, para um mesmo valor de mês/ano de competência?
    • A coluna HL.DTMUDANCA está declarada como date ou datetime? Se como datetime, o horário está sempre zerado?
    • Se a competência for 2/2014 e houver, na tabela Histórico de Locação, uma linha para 12/2/2014 e outra para 18/1/2014, qual deve ser selecionada?

    Consegui, fiz os testes e verificações e as informações estão sendo todas exibidas conforme a necessidade.

    Respondendo seus questionamentos:

    • Podem existir mais de uma linha para o mesmo funcionário, no mesmo mês/ano de competência, porém os valores e outros campos são diferentes. Nos testes não apresentaram nenhum erro.
    • A coluna HL.DTMUDANÇA é datetime, porém com o horário sempre zerado.
    • Deverá ser selecionada a linha 12/02/2014, como está nos testes realizados.

    Mais uma vez, muito obrigada pelo apoio.

    segunda-feira, 1 de junho de 2015 11:22