Usuário com melhor resposta
Join + TOP

Pergunta
-
Boa tarde,
Preciso fazer um select usando join em uma outra tabela, porém esta tabela tem N valores que fazem join e eu preciso de apenas o mais recente.
Por exemplo:
Na tabela A tenho informações sobre o funcionário (matricula e nome).
Na tabela B tenho informaçoes sobre o ponto do funcionario (matricula e data)Na tabela B, informo eventuais faltas, atrasos etc.
Então preciso retornar no meu Select o nome e a data da última falta/atraso para cada funcionario da tabela A.
Como posso fazer isto?
Desde já agradeço a a ajuda.
At.
Rodrigo de OliveiraRodrigo de Oliveira
Respostas
-
SELECT MAT,
NOME,
(SELECT TOP 1 MAX(DATA)
FROM TABELAB AS B
WHERE TIPO = 'FALTA'
AND A.MAT = B.MAT) AS ULTFALTA
FROM TABELAA AS A
Isso deve resolver...
Espero ter ajudado !!
Não esqueça de marcar o post como útil caso tenha te ajudado.
- Marcado como Resposta Harley Araujo sexta-feira, 17 de agosto de 2012 13:46
Todas as Respostas
-
Rodrigo,
Ficaria algo do tipo:
Select a.nome, b.data from tabelaA a inner join tabelaB b on (a.matricula = b.matricula)
where b.data is null
Mas tem um porem, vai depender da estrutura da sua tabela. Se o funcionario faltou como vc grava na tabelaB? Fica como NULO, zero, outra data, etc....
Esta questão de relação entre ponto e funcionario tem algumas variaveis dependendo de sistema para sistema. Então a sugestão acima é apenas para ter uma ideia.
Caso não consiga resolver, mande um exemplo de como estão os dados para analise.
Att.,
Marco Antônio Pinheiro / MCTS - MCC http://marcoantoniopinheiro.blogspot.com
- Marcado como Resposta Redschenko quinta-feira, 16 de agosto de 2012 11:21
- Não Marcado como Resposta Redschenko quinta-feira, 16 de agosto de 2012 13:46
-
Olá Marco.
No meu exemplo, esqueci de mencionar que a tabela B, armazenará apenas os eventos de falta atraso.
Ex:
Tabela A (FUNCIONARIO)
MAT NOME 1 Maria 2 Joao 3 Pedro 4 Carla Tabela B (Eventos Ponto)
MAT DATA TIPO 1 01/08/2012 FALTA 3 01/08/2012 ATRASO 2 01/08/2012 ATRASO 2 02/08/2012 ATRASO 3 02/08/2012 FALTA 4 02/08/2012 FALTA 1 03/08/2012 FALTA 1 04/08/2012 ATRASO 4 04/08/2012 FALTA Neste caso, preciso para cada funcionário saber qual foi a data do última falta, e caso não houver trazer nulo ou em branco ou um texto "não há faltas".
Rodrigo de Oliveira
-
-
-
SELECT MAT,
NOME,
(SELECT TOP 1 MAX(DATA)
FROM TABELAB AS B
WHERE TIPO = 'FALTA'
AND A.MAT = B.MAT) AS ULTFALTA
FROM TABELAA AS A
Isso deve resolver...
Espero ter ajudado !!
Não esqueça de marcar o post como útil caso tenha te ajudado.
- Marcado como Resposta Harley Araujo sexta-feira, 17 de agosto de 2012 13:46