次のようなテーブルがあります。
OrderNo | Operation | PlannedStart |PlannedEnd | ActualStart | ActualEnd | OpComplete
1 | 1 | 01/02/13 | 01/03/13 | 01/03/13 | 01/03/13 | True
1 | 2 | 01/03/13 | 01/04/13 | 01/04/13 | 01/05/13 | True
2 | 1 | 01/01/13 | 01/02/13 | 01/01/13 | 01/02/13 | True
2 | 2 | 01/02/13 | 01/03/13 | 01/02/13 | 01/03/13 | True
3 | 1 | 01/01/13 | 01/02/13 | 01/01/13 | 01/02/13 | True
3 | 2 | 01/02/13 | 01/03/13 | 01/02/13 | NULL | False
そして、次のようなクエリ:
SELECT
OrderNo,
MIN(PlannedStart) AS PlannedStart,
MAX(PlannedEnd) AS PlannedEnd,
MIN(ActualStart) AS ActualStart,
MAX(ActualEnd) AS ActualEnd,
DATEDIFF(hour, MIN(PlannedStart), MAX(PlannedEnd)) AS PlannedThroughput,
DATEDIFF(hour, MIN(ActualStart), MAX(ActualEnd)) AS ActualThroughput
FROM Operations
GROUP BY OrderNo
ORDER BY ActualThroughput Desc
注文を完了するのにかかった実際の時間 (すべての操作の合計時間) を調べ、後でそれを計画された時間と比較できるようにしようとしています。
このコードは、最初の操作の開始日と最後の操作の終了日を取得し、差を計算して時間数として表示します。
この問題は、注文の操作が完了していない場合に発生し、実際の終了として「NULL」が表示されます。Null は、MAX() 関数で ActualThroughput (コードを参照) を計算するために使用できる値ではないため、「NULL」ではない最後の値を取得し、不正確な結果が得られます。
まだ完了していないすべての注文 (グループ) を完全に除外できるようにしたいと考えています。これどうやってするの?