2013-10-02 5 views
2
I는 다음과 같습니다 테이블이

:전체 그룹을 제외

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'이 아닌 마지막 값을 사용하여 부정확 한 결과를 얻습니다.

아직 완료되지 않은 모든 주문 (그룹)을 완전히 제외 할 수 있기를 바랍니다. 어떻게해야합니까?

+0

SQLFiddle 사용하여 SELECT 문에서 NULL 값을 제거 : 나는 더 얻을 내가 이렇게하지 않으면 http://www.sqlfiddle.com/#!3/ab4e4/3 –

답변

0

그냥 WHERE 절

WHERE NOT ActualEnd IS NULL 
+0

을 확인 – user2839189

+0

지금 내가 생각하는 이유를 모두 한 결과는 .. 내가 이런 식으로 쓴 .. 알아낼 canät : ActualEnd 그러나이 나던 작업 NULL이 아닌 이, 이것은 전체 순서 (그룹)를 배제하지 않는다. ActualEnd로 NULL을 갖는 단일 행만 제외합니다. – user2839189

+1

Ok, ActualEnd에 NULL 값이 있으면 전체 그룹을 제외 하시겠습니까? 이것을보십시오 : WHERE OrderNo NOT (SELECT OrderNo FROM Operations Here ActualEnd가 NULL 임) –

관련 문제