【问题标题】:T-SQL How to update the bottom/last row only?T-SQL 如何仅更新底部/最后一行?
【发布时间】:2021-01-15 06:08:41
【问题描述】:

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

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 递增。

【问题讨论】:

    标签: tsql sql-update record


    【解决方案1】:
    ;WITH CTE AS 
    ( 
    SELECT TOP 1 * 
    FROM @ResultTable
    ORDER BY PeriodID DESC
    ) 
    UPDATE CTE SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate)
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        UPDATE @ResultTable
        SET PeriodLastDate=DATEADD(DAY,-1,PeriodLastDate)
        where <unique column> = (select top 1 <unique column> 
          from @ResultTable
          order by PeriodID desc
          )
        

        【讨论】:

          【解决方案4】:

          怎么样:

          UPDATE ResultTable SET PeriodLastDate='NewValue' WHERE ID= (SELECT MAX(ID) FROM ResultTable)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-11-22
            • 1970-01-01
            • 2017-10-12
            • 2018-01-07
            • 2015-03-20
            • 2018-09-20
            • 2011-05-26
            相关资源
            最近更新 更多