제품 번호가 같지만 날짜가 다른 여러 행을 포함하는 데이터베이스 테이블의 가장 최근 항목을 선택하고 싶습니다. 이 특별한 경우 , 나는 테이블에 5 회 이상 발생 PRODUCT_NUMBER
들에 의해 TKP_NOISE_MOTOR_RESULTS
표를 필터링 할, 그 부분 집합에서, 나는 각 prdocut 수SQL Oracle Query :이 쿼리를 최적화 할 수 있습니까?
SAVEDATE
가장 최근 행을 검색 할
그런 쿼리를 만들었지 만 세 가지 하위 쿼리 T1, T2, T3가 있습니다. 나는 느낌이있다. 그것은 단지 두 개의 테이블만으로 수행 할 수 있으며 내부 조인은 필요하지 않다. 그러나 스크립트를 MySQL에서 Oracle로 변환하기가 어려웠 기 때문에이 스크립트를 만드는 데 많은 시간이 걸렸습니다.
하위 쿼리가 덜 필요하도록 다음 쿼리를 최적화 할 수 있습니까?
SELECT * FROM
messfeld.TKP_NOISE_MOTOR_RESULTS T1
JOIN
(
SELECT PRODUCT_NUMBER, COUNT(*)
FROM messfeld.TKP_NOISE_MOTOR_RESULTS
GROUP BY PRODUCT_NUMBER
HAVING COUNT(*)>5
) T2
ON T1.PRODUCT_NUMBER=T2.PRODUCT_NUMBER
WHERE T1.SAVEDATE BETWEEN '27-AUG-14' AND '28-AUG-14' AND
(T1.SAVEDATE, T1.PRODUCT_NUMBER) IN
(
SELECT MAX(T3.SAVEDATE), T3.PRODUCT_NUMBER
FROM messfeld.TKP_NOISE_MOTOR_RESULTS T3
WHERE
T2.PRODUCT_NUMBER=T3.PRODUCT_NUMBER
GROUP BY PRODUCT_NUMBER
);
몇 가지 샘플 데이터와 예상되는 결과를 보여줄 수 있습니까? 아니면 더 나은, [SQL 피들] (http://sqlfiddle.com/)을 만드시겠습니까? –
흠, 두 가지 특정 날짜 사이의 레코드 만보고 계십니까? 또는 가장 최근의 날짜가 그 날짜 사이에있는 모든 레코드? –
좋은 질문입니다. 생각 좀하자. –