助けてください、私は私のMSSQLデータテーブルの1つに次のデータを持っています。
ID | StartDateTime | EndDateTime | OrderNo |
1 | 12-08-01 08:00 | 12-08-01 08:00 | 6001 |
5 | 12-08-01 09:00 | 12-08-01 10:00 | 6001 |
7 | 12-08-01 10:00 | 12-08-01 11:00 | 6001 |
10 | 12-08-01 11:00 | 12-08-01 12:00 | 6002 |
15 | 12-08-01 12:00 | 12-08-01 13:00 | 6002 |
22 | 12-08-01 13:00 | 12-08-01 14:00 | 6003 |
29 | 12-08-01 14:00 | 12-08-01 15:00 | 6001 |
33 | 12-08-01 15:00 | 12-08-01 16:00 | 6001 |
36 | 12-08-01 16:00 | 12-08-01 17:00 | 6004 |
問題は、現在、OrderNoが複数回使用されているかどうかを判断する方法がないことです。Order6001が2回実行されたとは言えません。
今後、注文の各実行を一意に識別するための新しいフィールドを追加できるようにしたいと思います。ただし、以前のレコードに戻って更新することもできます。
ID | StartDateTime | EndDateTime | OrderNo | Run |
1 | 12-08-01 08:00 | 12-08-01 08:00 | 6001 | 1 |
5 | 12-08-01 09:00 | 12-08-01 10:00 | 6001 | 1 |
7 | 12-08-01 10:00 | 12-08-01 11:00 | 6001 | 1 |
10 | 12-08-01 11:00 | 12-08-01 12:00 | 6002 | 1 |
15 | 12-08-01 12:00 | 12-08-01 13:00 | 6002 | 1 |
22 | 12-08-01 13:00 | 12-08-01 14:00 | 6003 | 1 |
29 | 12-08-01 14:00 | 12-08-01 15:00 | 6001 | 2 |
33 | 12-08-01 15:00 | 12-08-01 16:00 | 6001 | 2 |
36 | 12-08-01 16:00 | 12-08-01 17:00 | 6004 | 1 |
OrderNoとRunでグループ化できるという考えで、以下を受け取ります。
OrderNo | Run | RunStart | RunEnd |
6001 | 1 | 12-08-01 08:00 | 12-08-01 11:00 |
6001 | 2 | 12-08-01 14:00 | 12-08-01 16:00 |
6002 | 1 | 12-08-01 11:00 | 12-08-01 13:00 |
6003 | 1 | 12-08-01 13:00 | 12-08-01 14:00 |
6004 | 1 | 12-08-01 16:00 | 12-08-01 17:00 |
ROW_NUMBER、CTE、カーソルなどを使用してデータを実行する複数の方法を試しました。簡単な解決策があると思いますが、理解できません。
これが理にかなっていることを願っています。
編集
最初のラウンドには含めなかった追加の複雑さを参照するようにデータテーブルを変更しました。提供されたアーロンのソリューションはうまく機能したでしょう。ただし、実行は最大2時間(または行)しか持続できないと想定しています。私のデータベースでは、これらはn時間(または行)実行されます。申し訳ありませんが、最初ははっきりしていませんでした。これまでのご協力に感謝いたします。