我想更新表格的底部/最后一行。我试图实现this解决方案,但似乎没有任何正确的语法:
UPDATE TOP(1) @ResultTable
SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate)
ORDER BY PeriodID DESC
OR
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。
答案 0 :(得分:18)
;WITH CTE AS
(
SELECT TOP 1 *
FROM @ResultTable
ORDER BY PeriodID DESC
)
UPDATE CTE SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate)
答案 1 :(得分:6)
你的问题没有足够的背景来给出一个防弹的答案。根据您的工作解决方案,如何而不是查找计数查找最大PeriodID?只要后续的PeriodID值更大,它就可以获得“最后”记录。
UPDATE @ResultTable
SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate)
WHERE PeriodID=(SELECT MAX(PeriodID) FROM @ResultTable)
答案 2 :(得分:1)
如果每行都有一个唯一的列(可能是PeriodID?),你可以这样做:
UPDATE @ResultTable
SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate)
where <unique column> = (select top 1 <unique column>
from @ResultTable
order by PeriodID desc
)