DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
Flavio Dogevaldo Silva
 


País: Brasil
Estado: SP
Cidade: Guarulhos
Mensagens: 51
 Postado em: 11/10/2011 12:51:58 PM

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:
#Código

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,
Edgard Leal
 


País: Brasil
Estado: BA
Cidade: Salvador
Mensagens: 9
 Postado em: 11/10/2011 01:28:05 PM

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
Flavio Dogevaldo Silva
 


País: Brasil
Estado: SP
Cidade: Guarulhos
Mensagens: 51
 Postado em: 13/10/2011 08:32:29 AM

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

#Código

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
Emerson
 

 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 938
 Postado em: 13/10/2011 05:11:35 PM

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)
Flavio Dogevaldo Silva
 


País: Brasil
Estado: SP
Cidade: Guarulhos
Mensagens: 51
 Postado em: 20/10/2011 04:26:35 PM

Deu certo, obrigado man...

VLW
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03