建設プロジェクトのライフサイクル中のパネル状態に基づいて、余分な負荷を電力パネルに追加する効果を判断しようとしています。電源パネルには複数の負荷(最大240)が関連付けられていてもよく、これらの負荷は、いつでも構築スケジュールに基づいてインストールまたは削除することができます。パネルの負荷の合計は、プロジェクトのライフサイクルにわたって変動します。ロードが今日90%であるという理由だけで、新しいロードが明日にインストールされる予定であるため、自動的に10%の空き容量があることを意味しません。プロジェクトのライフサイクルは常に考慮する必要があります。集計複数の日付範囲に基づく値の合計 - SQL Server
パネル上のすべての負荷のインストール/アンインストールの日付に基づいて、指定された日付にパネルの最大負荷を決定するクエリが必要です。
次は、負荷とそのインストール/削除の日付のサンプルビューです。
CREATE TABLE #temp(
PanelID INTEGER NOT NULL
,LOADID INTEGER NOT NULL
,Load VARCHAR(7) NOT NULL
,kVA NUMERIC(5,2) NOT NULL
,InstallDate DATE NOT NULL
,DemoDate DATE
);
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,46706,'AUTO26',43.95,'07/07/1905','27/10/2016');
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,46706,'AUTO26',43.95,'07/07/1905','27/10/2016');
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,15539,'AUTO22',43.95,'01/01/2015',NULL);
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,20188,'OVEN101',46.47,'29/06/2017',NULL);
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,20186,'OVEN101',63.05,'29/06/2017',NULL);
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,46705,'AUTO28',61.25,'07/07/1905','27/10/2016');
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,20186,'OVEN101',63.05,'29/06/2017',NULL);
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,46705,'AUTO28',61.25,'07/07/1905','27/10/2016');
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,15539,'AUTO22',43.95,'01/01/2015',NULL);
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,20188,'OVEN101',46.47,'29/06/2017',NULL);
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,15538,'AUTO22',66.65,'01/01/2015',NULL);
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,20187,'OVEN101',50.44,'29/06/2017',NULL);
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,46704,'AUTO26',61.25,'07/07/1905','27/10/2016');
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,46707,'AUTO28',43.95,'07/07/1905','27/09/2016');
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,15538,'AUTO22',66.65,'01/01/2015',NULL);
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,20187,'OVEN101',50.44,'29/06/2017',NULL);
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,46704,'AUTO26',61.25,'07/07/1905','27/10/2016');
INSERT INTO #temp(PanelID,LOADID,Load,kVA,InstallDate,DemoDate) VALUES (1380,46707,'AUTO28',43.95,'07/07/1905','27/09/2016');
日に私のソリューションは、パネル上の負荷に関連したすべての与えられた日に、パネルの荷重(和またはキロボルトアンペア)を見つけるために、カーソルを使用することでした。パネルに最大240の負荷がかかる可能性があるため、パフォーマンスが大幅に低下します。
これを行うには良い方法がありますか?
編集:推奨するようにcreate tableを簡略化しました。パネルでグループ化してkVA列を合計するだけで結果を取得することができます。しかし、パネル上の各Loadのインストール日に基づいています。アンインストール日付がインストール日よりも小さい場合、それは集約機能には表示されません。
サンプルコードは実行されません。主キー違反が発生しています。一意にする必要がある場合は、複数の1375 SourceIDがあります。 –
あなたはより良い応答を得るためにあなたの質問で2つのことをする必要があると思います。一時テーブル作成のアプローチは良いですが、フィールドを見て、問題を表現するためにそれらをすべて必要とし、それらの行をすべて必要としますか?したがって、サンプルデータを最小要件に単純化してから、出力がどのように見えるかを指定します。また、あなたの現在の試みは役に立ちます。 – Tanner
また、私は英国にいるので、取得:*文字列。*から日付や時刻を変換するときに変換に失敗しました.yyyymmdd'のような日付をフォーマットするのに最適です.SQLはこれを常に理解します。 – Tanner