none
Join + TOP RRS feed

  • 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 Oliveira


    Rodrigo de Oliveira

    quarta-feira, 15 de agosto de 2012 20:06

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
    quinta-feira, 16 de agosto de 2012 14:24

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
    quarta-feira, 15 de agosto de 2012 20:41
  • 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

    quinta-feira, 16 de agosto de 2012 11:20
  • Bom dia.

    Rodrigo, diante do exemplo acima poste como vc quer que o resultado final apareça.

    Obrigado.


    Marco Antônio Pinheiro / MCTS - MCC http://marcoantoniopinheiro.blogspot.com

    quinta-feira, 16 de agosto de 2012 12:00
  • Segue:

    MAT NOME ULT FALTA
    1 Maria 03/08/2012
    2 Joao -
    3 Pedro 02/08/2012
    4 Carla 04/08/2012


    Rodrigo de Oliveira

    quinta-feira, 16 de agosto de 2012 13:48
  • 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
    quinta-feira, 16 de agosto de 2012 14:24