10

我想更新表格中的底部/最后一行。我已尝试实现解决方案,但似乎没有正确的语法:

UPDATE TOP(1) @ResultTable
SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate)
ORDER BY PeriodID DESC

或者

UPDATE TOP(1) @ResultTable
SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate)
FROM @ResultTable
ORDER BY PeriodID DESC

我现在工作的是:

UPDATE @ResultTable
SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate)
WHERE PeriodID=(SELECT COUNT(PeriodID) FROM @ResultTable)-1

但这并不总是有效,因为在我的函数中,一些记录被删除了,而且我的 PeriodID 并不总是以 1 递增。

4

4 回答 4

23
;WITH CTE AS 
( 
SELECT TOP 1 * 
FROM @ResultTable
ORDER BY PeriodID DESC
) 
UPDATE CTE SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate)
于 2012-11-08T16:07:08.667 回答
7

您的问题中没有足够的上下文来给出无懈可击的答案。根据您的工作解决方案,如何不查找最大 PeriodID 的计数?只要后续 PeriodID 的值更大,它就应该可以获取“最后一个”记录。

UPDATE @ResultTable
SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate)
WHERE PeriodID=(SELECT MAX(PeriodID) FROM @ResultTable)
于 2012-11-08T16:08:28.390 回答
1

如果您在每一行中都有一个唯一列(可能是 PeriodID?),您可以执行以下操作:

UPDATE @ResultTable
SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate)
where <unique column> = (select top 1 <unique column> 
  from @ResultTable
  order by PeriodID desc
  )
于 2012-11-08T16:09:28.017 回答
1

关于什么 :

UPDATE ResultTable SET PeriodLastDate='NewValue' WHERE ID= (SELECT MAX(ID) FROM ResultTable)
于 2021-01-14T22:08:41.257 回答