ユーザー名とグループ名の最新時刻を返すクエリを書きましょう。
SELECT
UserName, GroupName, MAX(deprovision_time)
FROM
user_deprovision
GROUP BY
UserName, GroupName
では、これを目的に合わせて調整してみましょう。Oracle では、それを一時テーブルに変換するために何かをするかもしれませんが、ここでは代わりに相関サブクエリを使用します。
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);