none
Select RRS feed

  • Pergunta

  • Boa tarde galera...estou com uma duvida de sintaxe...

    Tenho a seguinte tabela:

    ID     SALDO     DATA

    1    78.5    12/26/2008 13:07:00
    1    79.5    11/28/2008 13:42:12
    1    81    10/29/2008 13:47:00
    2    0    9/30/2009 15:36:11
    3    4    10/23/2009 17:35:06
    5    21    8/30/2008 18:38:06
    5    50    9/7/2008 19:20:43
    5    59    10/17/2008 16:25:30
    5    126    1/2/2009 11:36:23
    5    127

       12/16/2008 14:55:00

     

    Bom..preciso fazer um select mas que me retorne somente 1 ID de cada, porém, com a data mais atual possível...então..o retorno constaria por exemplo um ID 1, um ID 2, 3 e 5 com a data mais atual do saldo.


    Rombesso
    segunda-feira, 27 de setembro de 2010 18:32

Respostas

  • Boa tarde Edgar,

     

    Veja se o exemplo abaixo pode te auxiliar e para qualquer dúvida estou à disposição:



    declare @table as table(
    id int,
    saldo decimal(15,2),
    data date);

    insert into @table values(1,78.5,'2008/12/26');
    insert into @table values(1,79.5,'2008/11/28');
    insert into @table values(1,81,'2008/10/29');
    insert into @table values(2,0,'2009/09/30');
    insert into @table values(3,4,'2009/10/23');

    -- select
    select a.id, data_max,saldo from @table t
    inner join (select MAX(data) as data_max,id from @table
    group by id) a on t.id = a.id and data = data_max

    • Sugerido como Resposta Edgar Esteves terça-feira, 28 de setembro de 2010 10:10
    • Marcado como Resposta Edgar Rombesso quinta-feira, 30 de setembro de 2010 12:35
    segunda-feira, 27 de setembro de 2010 18:54
  • Rombesso,

    usando o exemplo do amigo Adriano, montei uma outra forma de fazer usando CTE (para sql 2005 ou 2008) (a forma do Adriano para qq versao)

    declare @table as table(
    id int,
    saldo decimal(15,2),
    data date);
    
    insert into @table values(1,78.5,'2008/12/26');
    insert into @table values(1,79.5,'2008/11/28');
    insert into @table values(1,81,'2008/10/29');
    insert into @table values(2,0,'2009/09/30');
    insert into @table values(3,4,'2009/10/23');
    
    ;with cte_Dados
    as
    (
    select row_number() over(partition by id order by id,data desc) number,* from @table
    )
    select id,saldo,data from cte_Dados where number=1
    

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba
    • Sugerido como Resposta Edgar Esteves terça-feira, 28 de setembro de 2010 10:10
    • Marcado como Resposta Edgar Rombesso quinta-feira, 30 de setembro de 2010 12:35
    segunda-feira, 27 de setembro de 2010 22:19
    Moderador

Todas as Respostas

  • Boa tarde Edgar,

     

    Veja se o exemplo abaixo pode te auxiliar e para qualquer dúvida estou à disposição:



    declare @table as table(
    id int,
    saldo decimal(15,2),
    data date);

    insert into @table values(1,78.5,'2008/12/26');
    insert into @table values(1,79.5,'2008/11/28');
    insert into @table values(1,81,'2008/10/29');
    insert into @table values(2,0,'2009/09/30');
    insert into @table values(3,4,'2009/10/23');

    -- select
    select a.id, data_max,saldo from @table t
    inner join (select MAX(data) as data_max,id from @table
    group by id) a on t.id = a.id and data = data_max

    • Sugerido como Resposta Edgar Esteves terça-feira, 28 de setembro de 2010 10:10
    • Marcado como Resposta Edgar Rombesso quinta-feira, 30 de setembro de 2010 12:35
    segunda-feira, 27 de setembro de 2010 18:54
  • Rombesso,

    usando o exemplo do amigo Adriano, montei uma outra forma de fazer usando CTE (para sql 2005 ou 2008) (a forma do Adriano para qq versao)

    declare @table as table(
    id int,
    saldo decimal(15,2),
    data date);
    
    insert into @table values(1,78.5,'2008/12/26');
    insert into @table values(1,79.5,'2008/11/28');
    insert into @table values(1,81,'2008/10/29');
    insert into @table values(2,0,'2009/09/30');
    insert into @table values(3,4,'2009/10/23');
    
    ;with cte_Dados
    as
    (
    select row_number() over(partition by id order by id,data desc) number,* from @table
    )
    select id,saldo,data from cte_Dados where number=1
    

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba
    • Sugerido como Resposta Edgar Esteves terça-feira, 28 de setembro de 2010 10:10
    • Marcado como Resposta Edgar Rombesso quinta-feira, 30 de setembro de 2010 12:35
    segunda-feira, 27 de setembro de 2010 22:19
    Moderador
  • vlw galera..consegui usando os dois modelos...
    Rombesso
    quinta-feira, 30 de setembro de 2010 12:43