사용자 이름과 그룹 이름의 최신 시간을 반환하는 쿼리를 작성해 보겠습니다.
SELECT
UserName, GroupName, MAX(deprovision_time)
FROM
user_deprovision
GROUP BY
UserName, GroupName
이제 이것을 용도에 맞게 조정 해 보겠습니다. 오라클에서는 이것을 임시 테이블로 바꾸는 작업을 수행 할 수도 있지만 여기에서는 상관 관계가있는 하위 쿼리를 사용합니다.
DELETE FROM user_deprovision AS dp1
WHERE dp1.deprovision_time <
ANY (SELECT deprovision_time FROM user_deprovision AS dp2
WHERE dp1.UserName = dp2.UserName
AND dp1.GroupName = dp2.GroupName);
우리는 이것을 결합으로 바꿀 수 있습니다.
SELECT dp1.id
FROM user_deprovision AS dp1
JOIN user_deprovision AS dp2
ON dp1.UserName = dp2.UserName
AND dp1.GroupName = dp2.GroupName
WHERE
dp1.deprovision_time < dp2.deprovision_time
그리고 해당 삭제는 다음과 같습니다
DELETE FROM user_deprovision
WHERE id IN (
SELECT dp1.id
FROM user_deprovision AS dp1
JOIN user_deprovision AS dp2
ON dp1.UserName = dp2.UserName
AND dp1.GroupName = dp2.GroupName
WHERE
dp1.deprovision_time < dp2.deprovision_time);
제거는'잘못 t2'.its. – som
왜 주문을 주문 하시겠습니까? 말도 안돼. – Tomalak
@tomalak : 작동하는 경우 ORDER BY를 시도한 데이터 만 최신 데이터로 유지하려고합니다. –