我有一个看起来像这样的表:
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”的值并给我一个不准确的结果。
我希望能够完全排除所有尚未完成的订单(组)。我怎样才能做到这一点?