0

データと変換について説明するために完全な SQL コードを投稿しようとしましたが、ここには投稿されませんでした。簡単に言えば、次のようなデータテーブルになります。

Location  Date                     Direction  PreviousDirection  Offset
site1     2013-07-22 11:30:45.000   302        302                0
site1     2013-07-22 11:31:45.000   322        302               20
site1     2013-07-22 11:32:45.000     9        322               47
site1     2013-07-22 11:33:45.000     9          9                0
site1     2013-07-22 11:34:45.000     0          9               -9
site2     2013-07-22 11:30:45.000   326        326                0
site2     2013-07-22 11:31:45.000     2        326               36
site2     2013-07-22 11:32:45.000     2          2                0
site2     2013-07-22 11:33:45.000     2          2                0
site2     2013-07-22 11:34:45.000     2          2                0

場所、日付が主キーです。次のように計算された [AdjustedDirection] 列を生成する助けが必要です。

最初の行 (サイト 1、サイト 2 などの各場所): 計算する前の行がないため、AdjustedDirection = 最初の行の方向。

その後、2 行目の AdjustedDirection: 1 行目の AdjustedDirection に 2 行目のオフセットを加えたものです。3 行目の AdjustedDirection: 2 行目の AdjustedDirection に 3 行目のオフセットを加えたものです。等々...

これにはカーソルが必要だと思いますが、複数のカテゴリ (場所) でカーソルを実行するための構文がわからないか、別の答えがあるかもしれません。このステップにたどり着くまでに、いくつのステップがあり、プロセスがどれほど複雑であったかを説明することはできません。私は終わりに近づいていて、ここで完全に立ち往生しています!

これらの AdjustedDirection 値を設定する方法を知っている人がいる場合は、あなたの素晴らしさを証明してください。ありがとう!!

結果は次のようになります (間隔を空けるために日付が切り捨てられ、現在の行の調整済みの計算方法を明確にするために以前に調整された方向が示されています)。

Location  Date        Direction  Offset   PrevAdjDirection  AdjustedDirection
site1     11:30:45.000   302          0         302              302
site1     11:31:45.000   322         20         302              322
site1     11:32:45.000     9         47         322              369
site1     11:33:45.000     9          0         369              369
site1     11:34:45.000     0         -9         369              360
site2     11:30:45.000   326          0         326              326
site2     11:31:45.000     2         36         326              362
site2     11:32:45.000     2          2         362              362
site2     11:33:45.000     2          2         362              362
site2     11:34:45.000     2          2         362              362

ありがとう!

4

2 に答える 2

0

現在のデータを一時テーブルにダンプし、このように WHILE UPDATE を実行することになりました

SELECT Location, Date, Direction, Offset, Adjusted = NULL
INTO #results
FROM t1

WHILE (
SELECT COUNT(*) FROM #results WHERE Adjusted IS NULL
) > 0
UPDATE TOP (1) t1
 SET Adjusted = ISNULL(t2.Adjusted,ISNULL(t2.Direction,t1.Direction)) + t1.Offset
 FROM #results t1 
 LEFT JOIN #results t2 ON t2.Location = t1.Location AND t2.Date =     DateAdd(minute,-1,t1.Date)
WHERE t1.Adjusted IS NULL

インプットとインスピレーションをありがとう!

于 2013-07-25T15:08:08.923 に答える