日期:2014-05-17  浏览次数:20483 次

能否用一条Update语句完成拷贝上一条记录的值?
我的问题应该不难:
  比如有一张学生成绩单数据表TB,涉及到的字段有记录ID,学生标识SID,测试日期TDate,体育成绩Grade。当一条新的记录插入以后(Grade默认值是-1),我想用Update语句更改Grade的值为该学生上一次(按测试日期TDate)的Grade值。以便使用者在上次值的基础上修改。如果该学生(SID)没有上一次记录(第一次录入),Grade则以NULL代之。
  能否用一条语句Update实现,不要存储过程。谢谢!

------解决方案--------------------
SQL code

--> 测试数据: @TB
declare @TB table (ID int identity(1,1),SID int,TDate datetime,Grade int)
insert into @TB
select 2,'2012-01-01',83 union all
select 3,'2012-02-01',59 union all
select 4,'2012-04-01',89

select * from @TB

insert into @TB  
select 5,getdate(),(select top 1 Grade from @TB order by TDate desc)

select * from @TB
/*
ID          SID         TDate                   Grade
----------- ----------- ----------------------- -----------
1           2           2012-01-01 00:00:00.000 83
2           3           2012-02-01 00:00:00.000 59
3           4           2012-04-01 00:00:00.000 89
4           5           2012-08-12 18:52:33.747 89
*/

------解决方案--------------------
探讨
maco_wang:

你的好像不对。我的意思是2,3,4号学生在分别自2012-1-1,2012-2-1和2012-4-1第一次录入,当2,3,4号学生第二次录入(日期假如是2012-5-1),他们应该83,59和Null,而5号学生在2012-5-1是第一次录入,他的Grade应该是NULL。