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'이 아닌 마지막 값을 사용하여 부정확 한 결과를 얻습니다.
아직 완료되지 않은 모든 주문 (그룹)을 완전히 제외 할 수 있기를 바랍니다. 어떻게해야합니까?
SQLFiddle 사용하여 SELECT 문에서 NULL 값을 제거 : 나는 더 얻을 내가 이렇게하지 않으면 http://www.sqlfiddle.com/#!3/ab4e4/3 –