Pegar a data mais atual

11/10/2011

Então pessoal, blz?

To com uma duvida aqui.


Tenho as seguintes tabelas:

FLP_FUNCIONARIOS
- CodIntFunc
- NomeFunc
- ChapaFunc

FLP_FUNCAO
- CodFuncao
- DescFuncao

FLP_HISTORICOSALARIAL
- CodIntFunc
- CodFuncao
- DTHIST

---------------------------------------------
Preciso puxar o nome do funcionario e sua respectiva função atual.

Escrevi o seguinte codigo:
select  f.codintfunc CODIGO,
        f.chapafunc CHAPA,
        f.nomefunc NOME,
        fu.descfuncao FUNCAO,
        max(h.dthistsal) DATA
from flp_historicosalarial h,
     flp_funcionarios      f,
     flp_funcao            fu
where   h.codintfunc = f.codintfunc
and     h.codfuncao  = fu.codfuncao
Group By f.codintfunc,
         f.chapafunc,
         f.nomefunc,
         fu.descfuncao,
         h.dthistsal


Bom, sabendo que o funcionario pode mudar de função com o decorrer do tempo, ou seja, na tabela FLP_HISTORICOSALARIAL, podemos ter uma linha com o mesmo CodIntFunc, mas o CodFuncao diferente.

Aconteceu que para os funcionários que trocaram de função ao longo do tempo, criaram - se linhas repetidas com os nomes deles e as diferentes funções exemplo:

Codigo Chapa Nome Função Data
229 008074 ELIAS FRANCISCO SOARES MOTORISTA 01/05/2011
229 008074 ELIAS FRANCISCO SOARES MOT TRAINEE 01/05/2008
229 008074 ELIAS FRANCISCO SOARES COBRADOR (A) 02/08/2006
229 008074 ELIAS FRANCISCO SOARES MOTORISTA LEVE 04/05/2009


Pergunta: Como conseguir pegar apenas a ultima função que este funcionario ocupou?

Atenciosamente,

Flavio Silva

Respostas

11/10/2011

Edgard Leal

select TOP 1 f.codintfunc CODIGO, /*Retorna apenas o primeiro registro encontrado*/
f.chapafunc CHAPA,
f.nomefunc NOME,
fu.descfuncao FUNCAO,
max(h.dthistsal) DATA
from flp_historicosalarial h,
flp_funcionarios f,
flp_funcao fu
where h.codintfunc = f.codintfunc
and h.codfuncao = fu.codfuncao
Group By f.codintfunc,
f.chapafunc,
f.nomefunc,
fu.descfuncao,
h.dthistsal
Responder Citar

13/10/2011

Flavio Silva

Meu último código foi esse, porém nao está me trazendo nada, ele entra em um looping eterno... kkkk

select f.codintfunc CODIGO,
       f.chapafunc CHAPA,
       f.nomefunc NOME,
       hist1.descfuncao FUNCAO,
       max(h.dthistsal) DATA
from   flp_historicosalarial h,
       (select fu.descfuncao, fu.codfuncao 
               from  flp_funcao fu,
                     flp_historicosalarial h1
               where fu.codfuncao = h1.codfuncao) hist1,
       flp_funcionarios f
where  h.codintfunc = f.codintfunc
and    h.codfuncao = hist1.codfuncao
and    f.codigoempresa = 1
and    f.codigofl = 1
Group By      
       f.codintfunc,
       f.chapafunc,
       hist1.descfuncao,
       f.nomefunc
--     h.dthistsal
Responder Citar

13/10/2011

Emerson

tente com esta instrução:

select
f.codintfunc CODIGO,
f.chapafunc CHAPA,
f.nomefunc NOME,
fu.descfuncao FUNCAO,
h.dthistsal DATA
from
flp_funcionarios f
inner join
flp_historicosalarial h on h.codintfunc = f.codintfunc
inner join
flp_funcao fu on fu.codfuncao = h.codfuncao
where
h.dthistsal = (select max(h2.dthistsal) from flp_historicosalarial h2
where h2.codintfunc = h.codintfunc)
Responder Citar

20/10/2011

Flavio Silva

Deu certo, obrigado man...

VLW
Responder Citar