[slq] supprimer ligne en fonction d'une date

Fermé
DaRenzo - 23 janv. 2011 à 18:40
Jean_Jacques Messages postés 1040 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 1 août 2014 - 24 janv. 2011 à 06:40
Bonjour,

Après une journée de recherches infructueuses, y aurait-t-il un cerveau capable de m'indiquer le chemin à suivre pour solutionner ce problème?

J'ai une base de données qui contient plusieurs colonnes dont une "date".
Pour éviter une surcharge de ma base de données, je souhaite pouvoir éliminer les lignes qui possèdent une date antérieure à par exemple 1 mois.

Pour l'instant ma requête ressemble à ça :
DELETE * FROM historique WHERE date_hist =(SELECT * FROM historique WHERE date_hist <= CURRENT_DATE - INTERVAL 10 DAY)

Sans résultats..

y a-t-il quelqu'un pour m''éclairer??

Merci d'avance
A voir également:

3 réponses

Bonsoir,

peut être comme ça (je ne connais pas ta base):

DELETE * FROM historique WHERE date_hist <= CURRENT_DATE - INTERVAL 10 DAY


sous Acces on écrierai:

DELETE * FROM historique WHERE date_hist <= FormatDateTime(now()-10) 
0
jee pee Messages postés 39611 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 avril 2024 9 230
Modifié par jee pee le 23/01/2011 à 21:19
Salut,

Je ne connais pas particulièrement la syntaxe que tu utilises (le CURRENT_DATE - INTERVAL 10 DAY). C'est sur quel SGBD ?

Mais je mettrais plutot : date_hist =(SELECT dat_hist FROM car le * ramène tous les champs de la table donc pas d'equalité avec une date ;-)

Et pour moi il doit y avoir une syntaxe plus simple comme :

DELETE * FROM historique WHERE date_hist <= (CURRENT_DATE - INTERVAL 10 DAY)

Pas besoin d'une sous requete

cdlt


Un étranger, c'est un ami qu'on n'a pas encore rencontré.
0
Jean_Jacques Messages postés 1040 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 1 août 2014 112
24 janv. 2011 à 06:40
Bonjour DaRenzo,

Voici une syntaxe SQL sous ACCESS 2000 qui a fait ses preuves pour supprimer les enregistrements de plus d'un an.
Avec un petit message d'alerte .....

Il suffit d'adapter le tout à votre contexte et de remplacer la valeur 365 par celle de votre choix.

If MsgBox("Confirmez-vous la suppression ?", vbQuestion + vbYesNo) = vbNo Then Exit Sub
DoCmd.RunSQL "DELETE Transactions.RéfTransaction, Transactions.RéfValeur, Transactions.RéfOpération, Transactions.RéfStatut, Transactions.DateSaisie, Transactions.DateLimite, Transactions.DateSolde, DateDiff('d',[datesolde],Now()) AS [Délai dépassé ] FROM Transactions WHERE (((DateDiff('d',[datesolde],Now()))>365));"

Cordialement
0