Pour ce cas d'espèce, un test d'existence suffit :
Recherche pour le même RIB, d'un enregistrement plus récent en statut 'AC' s'il n'y en a pas, on supprime
A vous d'alimenter la host-variable HV-DATE avec la date qui va bien, que vous pouvez si besoin calculer par rapport à la current-date
1 2 3 4 5 6 7
| DELETE FROM MA_TABLE MAIN
WHERE D-EVENT < :HV-DATE
AND NOT EXISTS
(SELECT 1 FROM MA_TABLE SUBQ
WHERE SUBQ.RIB = MAIN.RIB
AND SUBQ.D-EVENT > MAIN.D-EVENT
AND SUBQ.C-EVENT = 'AC') |
Si votre date D-EVENT de format DATE vous pouvez calculer comme ceci :
1 2 3 4 5 6 7
| DELETE FROM MA_TABLE MAIN
WHERE D-EVENT < ADD_MONTHS(CURRENT_DATE, -12)
AND NOT EXISTS
(SELECT 1 FROM MA_TABLE SUBQ
WHERE SUBQ.RIB = MAIN.RIB
AND SUBQ.D-EVENT > MAIN.D-EVENT
AND SUBQ.C-EVENT = 'AC') |
Si votre date est au format TIMESTAMP, il faut remplacer par
ADD_MONTHS(DATE(CURRENT TIMESTAMP),-12)
Edit : cela étant, notez bien qu'en général on ne code pas de requete, surtout pour du delete, en utilisant des registres comme current date ou current timestamp.
car ce type d'utilisation empêche de lancer le traitement en mode reprise et peut provoquer des incohérences s'il démarre le soir et se termine après minuit.
Le plus souvent, les responsables de prod imposent l'utilisation d'une date pilotée par le robot d'exploitation
Partager