 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
walsh Novato

Registrado: Domingo, 28 de Dezembro de 2014 Mensagens: 65
|
Enviada: Seg Jun 12, 2017 10:15 am Assunto: Listar Ultimo Registro Firebird [RESOLVIDO] |
|
|
Olá pessoal!
estou tentando fazer um sql de um banco de dados firebird de um sistema de folha de pagamento, eu preciso de varios campos de 5 tabelas... até ai tudo bem o sql está pronto mas ele puxa 2 ou 3 registros do mesmo funcionario.
Então fui verificar e tem uma tabela chamada CARGOS que grava a função do funcionário e grava todas as alterações de função, então por exemplo se o funcionário foi contratado como auxiliar de produção e depois foi promovido para coordenador de setor ele terá 2 vezes a ID dele nessa tabela CARGOS e quando executo o SQL puxa 2 vezes o nome dele mas com funções diferentes.
Eu quero que puxe somente uma vez cada funcionário e com a função mais atual, nessa tabela CARGOS tem um campo data que é a data da alteração da função, tentei utilizar o comando MAX para pegar a ultima data mas mesmo assim não está vindo correto, o sql roda normal mas os dados continuam vindo mais de uma vez se tiver alteração de função.
Basicamente seria assim que fiz o sql, são mais campos e mais tabelas mas fiz um basicão para teste e mesmo assim vem mais de um funcionário com todas as funções que ele exerceu:
SELECT
FUNC.NOME,
CAR.CARGO,
MAX(CAR.DATA)
FROM
EMPREGADOS FUNC
JOIN CARGOS CAR ON FUNC.IDEMPREGADO = CAR.IDEMPREGADO
GROUP BY
FUNC.NOME,
CAR.CARGO,
CAR.DATA
Editado pela última vez por walsh em Qua Jun 14, 2017 9:00 am, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Seg Jun 12, 2017 10:24 am Assunto: |
|
|
Bom dia,
Experimente utilizar uma CTE para obter o último cargo conforme exemplo abaixo:
| Código: | with CTE_Cargos as
(
select
IdEmpregado,
max(Data) as Data
from Cargos
group by
IdEmpregado
)
SELECT
FUNC.NOME,
CAR.CARGO,
cc.Data
FROM EMPREGADOS FUNC
INNER JOIN CTE_Cargos as cc
ON cc.IDMPREGADO = FUNC.IDEMPREGADO
INNER JOIN CARGOS CAR
ON CAR.IDEMPREGADO = FUNC.IDEMPREGADO AND
CAR.DATA = cc.Data |
Espero que ajude
Editado pela última vez por imex em Ter Out 03, 2023 2:43 pm, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
walsh Novato

Registrado: Domingo, 28 de Dezembro de 2014 Mensagens: 65
|
Enviada: Seg Jun 12, 2017 3:14 pm Assunto: |
|
|
amigo imex,
aparentemente deu tudo certo, fiz o teste com o pequeno sql e funcionou, dai refiz o sql normal e pelo que olhei por cima deu certo, listou somente um registro de cada funcionário e a ultima função da data de alteração.
Nem sabia que dava pra fazer isso no firebird... vivendo e aprendendo!
Muito Obrigado! Me quebrou um galhão!
abraço! |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|