none
(SELECT) Selecionar ultimas datas RRS feed

  • Pergunta

  • Olá estou com um problema de SELECT

    Tenho uma tabela Lotes e uma Estagios


    Cada lote tem varios estagios.
    No select de hj tenho todos os estagios referente a cada lote numa tabela, mas eu queria apenas o estagio mais velho de cada lote, ou seja, pra cada id de lote eu tenho apenas um estagio(o mais velho). Dentro da tabela estagio tenho data de insert dele e o id do lote que ele se refere.

    Obrigado!

    terça-feira, 17 de fevereiro de 2009 20:47

Respostas

  • Boa Noite,

    Tente o código abaixo:

    declare @estagiario table (idlote int, idestagiario int, data smalldatetime)  
    insert into @estagiario values (1, 1, '20090101')  
    insert into @estagiario values (1, 2, '20090122')  
    insert into @estagiario values (2, 3, '20090123')  
    insert into @estagiario values (2, 4, '20090126')  
    insert into @estagiario values (2, 5, '20090115')  
    insert into @estagiario values (3, 6, '20090118')  
    insert into @estagiario values (4, 7, '20090119')  
    insert into @estagiario values (5, 8, '20090123')  
    insert into @estagiario values (5, 9, '20090131')  
     
    ;with maiordata (idlote, ultimadata) as (  
    select idlote, max(data) from @estagiario  
    group by idlote)  
     
    select est.* from 
    @estagiario as est inner join 
    maiordata on est.idlote = maiordata.idlote and 
    est.data = maiordata.ultimadata  
    order by idlote 


    Sugiro dar uma olhada no link 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/

    Cálculos financeiros com SQL ? Clique abaixo:
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!361.entry


    Classifique as respostas. O seu feedback é imprescindível
    • Marcado como Resposta Felipe Acorsi quarta-feira, 18 de fevereiro de 2009 13:22
    terça-feira, 17 de fevereiro de 2009 21:01

Todas as Respostas

  • Boa Noite,

    Tente o código abaixo:

    declare @estagiario table (idlote int, idestagiario int, data smalldatetime)  
    insert into @estagiario values (1, 1, '20090101')  
    insert into @estagiario values (1, 2, '20090122')  
    insert into @estagiario values (2, 3, '20090123')  
    insert into @estagiario values (2, 4, '20090126')  
    insert into @estagiario values (2, 5, '20090115')  
    insert into @estagiario values (3, 6, '20090118')  
    insert into @estagiario values (4, 7, '20090119')  
    insert into @estagiario values (5, 8, '20090123')  
    insert into @estagiario values (5, 9, '20090131')  
     
    ;with maiordata (idlote, ultimadata) as (  
    select idlote, max(data) from @estagiario  
    group by idlote)  
     
    select est.* from 
    @estagiario as est inner join 
    maiordata on est.idlote = maiordata.idlote and 
    est.data = maiordata.ultimadata  
    order by idlote 


    Sugiro dar uma olhada no link 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/

    Cálculos financeiros com SQL ? Clique abaixo:
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!361.entry


    Classifique as respostas. O seu feedback é imprescindível
    • Marcado como Resposta Felipe Acorsi quarta-feira, 18 de fevereiro de 2009 13:22
    terça-feira, 17 de fevereiro de 2009 21:01
  • Olha muito obrigado, não testei ainda, mas amanhã te confirmo. Mas com certeza irá funcionar. Era justamente o que eu precisava

    SELECT IDCliente, MAX(Data) As UltimaData
    FROM Saldos GROUP BY IDCliente

    meu erro estava em nao botar o groub by.

    quarta-feira, 18 de fevereiro de 2009 01:58