2014-03-27 2 views
0

나는 테이블라는 maximo_audit을 가지고 있고 나는이 쿼리를 작성 N.의 승인 여부와 가장 최근의 actiondate 기록을 계산에만 노력하고 있지만, 종종오라클 최대 날짜 쿼리

SELECT COUNT (*) 
    FROM (SELECT MAX (actiondate) 
      FROM timedetail t JOIN maximo_audit m ON m.recordid = t.quantity 
      WHERE approvalstatus = 'N' 
      AND t.tsdate BETWEEN '8-dec-2013' AND '21-dec-2013' 
      AND task2 IS NOT NULL 
     --and recordid = '1781891' 
     GROUP BY m.recordid 
      HAVING MAX (actiondate) IN (SELECT MAX (actiondate) 
             FROM maximo_audit ma 
             WHERE ma.recordid = m.recordid)) 
+0

이 두 테이블에 대한 테이블 구조와 몇 가지 샘플 레코드를 제공해 주시겠습니까? – abhi

답변

0

을 실행하는 데 영원히 취하고있다 명시 적 조인을 사용하면 옵티마이 저가 도움이됩니다. 하위 쿼리를 더 간단하게 count(distinct)으로 바꿀 수도 있습니다.

SELECT COUNT(DISTINCT m.recordid) 
    FROM timedetail t JOIN 
     maximo_audit m 
     ON m.recordid = t.quantity JOIN 
     (select ma.recordid, max(actiondate) as actiondate 
     from maximo_audit ma 
     group by ma.recordid 
     ) ma 
     on ma.recordid = m.recordid and ma.actiondate = m.actiondate 
    WHERE approvalstatus = 'N' AND 
     t.tsdate BETWEEN '8-dec-2013' AND '21-dec-2013' AND 
     task2 IS NOT NULL; 

having

로 대체 할 수있는 작업 일의 최대 뭔가 같을 때, 작업 날짜의 다음 하나가 그 값과 일치하기 때문에 가입 할 수 있습니다.