私はStartTime(DATETIME)フィールドを含むデータ行を持つテーブルを持っています。昨年のおよそ1分間のデータ行があります。タイムスタンプが「最近」(これはウェブアプリケーションのデモデータ)になるようにStartTimeフィールドを更新するスクリプトを実行する方法が必要です。細かい間隔ですべてのタイムスタンプを更新する
私の考えは、ROW_NUMBER()およびDATEADD()を使用して、各行を新しいタイムスタンプで更新し、1年前の現在の時刻から開始し、1行あたり1分を反復することでした。 1分で区切られ、予想されるタイムスタンプ生成
SELECT TOP 10
DATEADD(MINUTE,ROW_NUMBER() OVER (Order by StartTime),DATEADD(yy, -1, GETDATE())) AS Ds
FROM Test WHERE ItemId='0E0814B9-79A0-4BCF-AB33-B89D84CA3BEC' ORDER BY StartTime;
:
アイデアは、SELECT文のために働くように見えた
2015-12-21 17:57:55.550
2015-12-21 17:58:55.550
2015-12-21 17:59:55.550
をしかし、私はUPDATEステートメントを使用して、同じ概念をしようとすると:
WITH Datarows (Ds)
AS
(
SELECT DATEADD(MINUTE,ROW_NUMBER() OVER (Order by StartTime),DATEADD(yy, -1, GETDATE())) AS Ds
FROM Test
WHERE ItemId='0E0814B9-79A0-4BCF-AB33-B89D84CA3BEC'
)
UPDATE Test
SET StartTime = Ds
FROM Datarows
更新されるタイムスタンプはすべて同じです:
2015-12-21 17:30:14.463
2015-12-21 17:30:14.463
2015-12-21 17:30:14.463
なぜこれが機能しないのですか?タイムスタンプを1分で区切るために、すべての行をどのように更新できますか?
アップデートでは、どのようにテーブルが関連していますか? TESTのすべての行がCTEのすべての値で更新され、最後の更新のみがStartTime列に格納されているようです。 – Steven
@Steven Testは唯一のテーブルです(関係なし)。それぞれのタイムスタンプが異なるように各行を更新し、1分ごとに分けていきたいと思います。 – mtmacdonald
TESTテーブルを更新する順序は何ですか? – Steven