none
Select para listar registros mais atuais RRS feed

  • Pergunta

  • Bom dia pessoal,

    Estou precisando fazer um select para trazer os dados mais novos da minha tabela, para exemplificar:

    Dados na tabela:

    Codigo   Nome         Valor   Atualizacao

    547         NOME1      10,00  01/12/2005

    547         NOME1      10,20  14/01/2006

    258         NOME2         8,00  10/01/2006

    258         NOME2      14,32  01/12/2006

    O resultado do select seria este:

    Codigo   Nome         Valor   Atualizacao

    547         NOME1      10,20  14/01/2006

    258         NOME2      14,32  01/12/2006

    Grato pela atenção,

    RickMura

    terça-feira, 26 de setembro de 2006 14:16

Respostas

  • Olá Rick,

     

    Creio que este select seja impossivel de ser feito, pois mesmo com códigos de produtos iguais, eles possuem outros valores e atualizações.

     

    O que eu sugiro a você é:

    select

    codigo,

    valor,

    atualizacao

    from tabela order by

    codigo,

    atualizacao desc

     

    ond vai pegar todos os produtos do mais atualizado para o menos atualizado.

    E na sua camada de negócios, você faria um while, for, etc e testasse se o código é igual:

    string codigo = String.Empty;

    for(int x = 0; x < dtsProdutos.Tables[0].Rows.Count;x++)

    {

       if(codigo == dtsProdutos.Tables[0].Rows[x][0]  //compara os códigos onde x é a linha e o 0 é a coluna dos códigos

       {

            dtsProdutos.Tables[0].Rows.Delete(x)

            dtsProdutos.Tables[0].AcceptChanges();

            x--;

       }

    else

       {

         codigo = dtsProdutos.Tables[0].Rows[x][0]; // Se for diferentes, ele armazenará o código para apagar os dados antigos

        }

    }

     

    Atenciosamente,

    Pedro

    terça-feira, 26 de setembro de 2006 17:36

Todas as Respostas

  • Rick,

    Veja se este exemplo pode resolver:

    Select Codigo, Nome, Valor, Max(Atualizacao) From Table

    Group By Codigo, Nome, Valor

    Order By Codigo Desc

    terça-feira, 26 de setembro de 2006 14:36
  • É eu tentei fazer desta forma mas não deu certo, vou postar meu código aqui: 

    Insert into PR_RATESIN (RateName,ProductCode,Origin,Destination,WeightLeft,WeightRight,Gross,GrossAdder,IncrementBy,RateDate)
      (Select pst_ptr_acc_cntrct,pst_ptr_srv_cd,pst_ptr_org,pst_ptr_dst,trf_brk_fr,trf_brk_to,trf_bs_rt,trf_adder,trf_brk_incr,max ([B_pstl_ptr.strt_eff_dt])
      from ibs1
      group by pst_ptr_acc_cntrct,pst_ptr_srv_cd,pst_ptr_org,pst_ptr_dst,trf_brk_fr,trf_brk_to,trf_bs_rt,trf_adder,trf_brk_incr);

    Minha tabela PR_RATESIN possui uma PK com os seguintes campos:

    RateName,ProductCode,Origin,Destination,WeightLeft,WeightRight

    Qdo tento rodar a query aparece um erro:

    Server: Msg 2601, Level 14, State 3, Line 1
    Cannot insert duplicate key row in object 'PR_RATESIN' with unique index 'IX_PR_RATESIN'.
    The statement has been terminated.

    ou seja também além de verificar qual o registro mais atual, verificar filtrar os duplicados de acordo com a minha PK.

    terça-feira, 26 de setembro de 2006 14:49
  • Olá Rick,

     

    Creio que este select seja impossivel de ser feito, pois mesmo com códigos de produtos iguais, eles possuem outros valores e atualizações.

     

    O que eu sugiro a você é:

    select

    codigo,

    valor,

    atualizacao

    from tabela order by

    codigo,

    atualizacao desc

     

    ond vai pegar todos os produtos do mais atualizado para o menos atualizado.

    E na sua camada de negócios, você faria um while, for, etc e testasse se o código é igual:

    string codigo = String.Empty;

    for(int x = 0; x < dtsProdutos.Tables[0].Rows.Count;x++)

    {

       if(codigo == dtsProdutos.Tables[0].Rows[x][0]  //compara os códigos onde x é a linha e o 0 é a coluna dos códigos

       {

            dtsProdutos.Tables[0].Rows.Delete(x)

            dtsProdutos.Tables[0].AcceptChanges();

            x--;

       }

    else

       {

         codigo = dtsProdutos.Tables[0].Rows[x][0]; // Se for diferentes, ele armazenará o código para apagar os dados antigos

        }

    }

     

    Atenciosamente,

    Pedro

    terça-feira, 26 de setembro de 2006 17:36