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 に答える