Usuário com melhor resposta
Select para listar registros mais atuais

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
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
Todas as Respostas
-
-
É 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.
-
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