Pegar a data mais atual
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:
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,
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
Curtidas 0
Respostas
Edgard Leal
11/10/2011
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
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
GOSTEI 0
Flavio Silva
11/10/2011
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
GOSTEI 0
Emerson Nascimento
11/10/2011
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)
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)
GOSTEI 0
Flavio Silva
11/10/2011
Deu certo, obrigado man...
VLW
VLW
GOSTEI 0