1

我有两个列 (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

但似乎它更新了不是最新的小(最旧)。

请问什么是对的

4

2 回答 2

3

您实际上并没有应用该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
于 2013-05-14T08:02:34.120 回答
0
UPDATE Order_Status
SET endTime=@startTime
WHERE startTime = (SELECT MAX(StartTime) FROM Order_Status where OrderID=@orderID)
AND OrderID=@orderID
于 2013-05-14T08:18:16.693 回答