T-SQL如何仅更新底部/最后一行?

时间:2012-11-08 16:04:22

标签: tsql sql-update record

我想更新表格的底部/最后一行。我试图实现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。

3 个答案:

答案 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
  )