我有两个列 (startTime, endTime) 的表,它们来自 dataTime 类型。
当我在此表中插入一行时,我想像这样更新此表中以前的数据:
update endTime in the row which has most recent (max) startTime
我是这样工作的(就像另一个线程告诉我的那样):
BEGIN
;with T as(
select *, ROW_NUMBER() over (order by startTime desc) RNum
from Order_Status
where OrderID=@orderID
)
update top(1) T set endTime=@startTime
END
但它似乎更新了小的(最旧的)不是最新的。
请问什么是正确的
最佳答案
您实际上并没有应用 ROW_NUMBER
方法的排序,您想要这样的东西:
BEGIN
;with T as(
select *, ROW_NUMBER() over (order by startTime desc) RNum
from Order_Status
where OrderID=@orderID
)
update T set endTime=@startTime
from (select top 1 * from T order by RNum ASC) T
END
或者更简洁一点,这应该可以工作(未经测试):
BEGIN
;with T as(
select top 1 *
from Order_Status
where OrderID=@orderID
order by startTime desc
)
update T set endTime=@startTime
END
关于sql server 2008 r2 top (1) 更新日期不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16537865/