locked
Ultimo Registro usando mais de uma tabela

    Frage

  • Boa tarde!

    Preciso executar um select que retorne f.idfuncionario, f.nmfuncionario, l.dtinicial, l.dtfinal. A tabela 'f' é o cadastro dos funcionarios. A tabela 'l' é um log dos motivos de afastamento de cada funcionario, ou seja, existem vários registros de férias do mesmo funcionario. Eu quero que na lista apareça apenas a ultima férias de cada um. Existe idfuncionario na tabela 'l', claro! Então, o select devera retornar:
    - todos os registros de f.idfuncionario, f.nmfuncionario e o ultimo de l.dtinicial e l.dtfinal em seus respectivos idfuncionario.

    Como ficaria o SQL?

    Abraços
    Freitag, 17. April 2009 20:48

Alle Antworten

  • Caro,

     Se entendi bem:

     Select f.id_funcionario, f.nm_funcionario, (select max(l.dtinicial) from log l where l.id_funcionario = f.id_funcionario), (select max(l.dtfinal) from log l where l.id_funcionario = f.id_funcionario) from funcionario f

     Tem outras formas de fazer, inclusive com CTE, mas acho que possivelmente a query acima funcione.

    Abraços
    Gilberto Neto
    Gilberto Neto Blog: http://gilberto-neto.spaces.live.com/default.aspx
    • Als Antwort vorgeschlagen Gilberto Neto Samstag, 18. April 2009 19:27
    Samstag, 18. April 2009 19:27
  • Gilberto, bom dia.

    Tive que fazer umas modificações para funcionar (apenas tirei os nomes l e f, usei direto o nome da tabela). Mais duas perguntas:
    - algumas dtinicial e dtfinal sao null, onde coloco ou como eu faço o where para não aparece-las?
    - dtinicial e dtfinal aparecem como SUB e SUB_2, como nomeio essas colunas?


    Abraços
    Ricardo Unterkircher
    Montag, 20. April 2009 12:19
  • Caro,

     Com a função MAX, se voltar nulo, é pq todos são nulos, então não terá como voltar outra informação.  Talvez seja algum problema com a ANSI_NULS, mas não creio.
     Sobre a nomeação, após o subselect, vc pode colocar qualquer nome que você queira.

    Abraços
    Gilberto Neto
    Gilberto Neto Blog: http://gilberto-neto.spaces.live.com/default.aspx
    Montag, 20. April 2009 12:26
  • Bom Dia,

    Eu sugiro uma cuidadosa leitura do artigo abaixo:

    Como retornar o último registro por grupo ?
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!277.entry

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Piores Práticas - Uso do COUNT(*)
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!538.entry
    Classifique as respostas. O seu feedback é imprescindível
    Montag, 27. April 2009 12:48
    Moderator
  • Post antigo, por isso o mesmo foi encerrado.

    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    Dienstag, 5. Juni 2018 12:50
    Moderator