StartTime という名前の 1 つの列で時間を丸めて時間だけを表示し、それを StartHour という名前の別の列に挿入する関数を作成する必要があります。EndTime と呼ばれる別の列では、DATEPART を使用して次の増分時間に切り上げる必要もあります (例: 23:33:00.0000000 は 23 (時間) + 1 (終了時間に切り上げる) = 24 になります)それを EndHour 列に保存する必要があります)。
これらの新しい値を、StartHour と StartMinute、EndHour、および EndMinute という名前の新しい列に挿入します (StartTime 列と EndTime 列は、 time(7) 形式で作業している元の値であり、履歴の目的で保持しています)元の列で)。
T-SQLでこれまでに持っているものは次のとおりです。
SELECT (DATEPART(HOUR, [StartTime])) AS StartHour,(DATEPART(MINUTE, [StartTime])) AS StartMinute,
(DATEPART(HOUR, [EndTime])) AS EndHour,
(DATEPART(MINUTE, [EndTime])) AS EndMinute, StartTime, EndTime
FROM [test].[dbo].[Outage_Reports]
ORDER BY OutageDate ASC
生成するもの:
StartHour StartMinute EndHour EndMinute Startime EndTime
16 0 17 30 16:00:00 17:30:00
ここで、この変換をストアド プロシージャに書き込む必要があります。このストアド プロシージャは、開始から終了までの長さが 1 時間以上の場合に、2 つ (停止が数時間続く場合はそれ以上) の新しい行をテーブルに挿入します。または、停止が 1 時間以下のときに 1 行だけ挿入します。そして、開始列と終了列でその 1 時間ごとの進行を説明する必要があります。 このような:
StartHour StartMinute EndHour EndMinute Startime EndTime
16 0 17 00 16:00:00 17:30:00
(上記は停止の最初の 1 時間を反映しており、下の 2 行目は、停止するまでの停止の後半の 30 時間を反映しています...両方とも、表内の同じ停止チケットに関連付けられます)
StartHour StartMinute EndHour EndMinute Startime EndTime
17 30 18 00 16:00:00 17:30:00
アイデアは、Web サイトの停止を 1 時間ごとに追跡して、注文を 1 時間ごとに追跡する注文テーブルに参加できるようにすることです (注文には分が含まれることはなく、時間だけが含まれます)。したがって、計画では、1.5 時間続く停止のために 2 つの行を作成して、16、17、および切り上げられた 18 時間ごとの値を、別のポイントとして機能する 30 分の列を持つ注文テーブルに関連付けることができます。の計算 (したがって、1 時間半は、1 時間分の注文と 30 分分の注文に相当します... 行ごとに分割されます)。このようにして、停止中の傾向をよりよく追跡できます。
このロジックをストアド プロシージャに書き込む方法については、少し途方に暮れています。おそらく、新しい時間と分の値を変数に宣言し、StartHour 列では常に DATEPART 時間の値に丸めておく必要があります (16:45 であっても... StartHour 列に 16 を挿入したい)。ただし、EndHour 列では、切り上げられた 1 時間ごとの値(この場合は 1 時間を超えたため、17 と 18)をEndHour 列に挿入したいと考えています。これにより、(これらの 2 つの行を介して) 2 時間近く停止が発生したことを説明できれば幸いです。これにより、orders テーブルへの簡単な結合が可能になります。
このロジックのストアド プロシージャに関するガイダンスをいただければ幸いです。