sql server 2008 r2 top (1) 更新日期不工作

标签 sql sql-server database sql-server-2008-r2

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

相关文章:

sql-server - 为什么使用 NEWID() 比 NEWSEQUENTIALID() 使用更多空间?

mysql - 在一列中多次存储多个值?

mysql - 这个表是 3NF 的吗?

sql - 如何阅读 NLS_DATE_FORMAT?

mysql 查询帮助 - REPLACE INTO?

sql-server - 从 UDF 访问 Sql Server CLR 文件系统

sql-server - 向 SQL 中的 View 添加新列

java - 锁定数据库记录以实现线程间的并发

php - Laravel 5.4 上传原文件名和扩展名

java - 在循环内准备语句