Supprimer des dates anciennes de chaque mois

Résolu/Fermé
ayoub36_ah Messages postés 10 Date d'inscription mardi 26 avril 2022 Statut Membre Dernière intervention 2 mai 2022 - 26 avril 2022 à 12:45
ayoub36_ah Messages postés 10 Date d'inscription mardi 26 avril 2022 Statut Membre Dernière intervention 2 mai 2022 - 27 avril 2022 à 10:54
Bonjour,

Je voulais conserver que les données qui ont la 1 ère date de chaque mois.

voila un exemple fictif:

07/01/2021

14/01/2021
21/01/2021
28/01/2021

04/02/2021

11/02/2021
18/02/2021
25/02/2021

05/03/2021

11/03/2021
18/03/2021
25/03/2021

01/04/2021

08/04/2021
15/04/2021
22/04/2021


Est-ce que vous pouvez m'aider svp pour faire une requête qui permet de répondre à ce besoin.
A voir également:

6 réponses

jee pee Messages postés 39582 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 avril 2024 9 224
Modifié le 26 avril 2022 à 12:58
Bonjour,

Pour trouver la date mini regarder avec un group by, quelque chose comme
select min(date) from table group by (annee(date),mois(date)) 

et après supprimer tout sauf ces enregistrements
delete from table where date not in (select min(date) from table group by (annee(date),mois(date)) ) 


0
ayoub36_ah Messages postés 10 Date d'inscription mardi 26 avril 2022 Statut Membre Dernière intervention 2 mai 2022
26 avril 2022 à 13:08
Bonjour,

Merci pour votre réponse, je vois ce que vous voulez faire, mais moi je voulais qu'il détecte automatiquement la 1 ere date de chaque mois, et il conserve cette date, et puis il supprime toutes les données jusqu'à la 1 ere date du prochain mois.
0
jee pee Messages postés 39582 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 avril 2024 9 224
26 avril 2022 à 13:12
c'est ce que fait la seconde requête
0
ayoub36_ah Messages postés 10 Date d'inscription mardi 26 avril 2022 Statut Membre Dernière intervention 2 mai 2022
26 avril 2022 à 13:29
D'accord, est ce que vous pouvez me dire qu'est-ce que je dois mettre dans "group by (annee(date),mois(date)) "

Par ce que à chaque exécute cette requête, il me dit qu'il y'as une fonction qui n'existe pas :

select min(date_MAJ) from test group by (annee(date),mois(date)) 
0
jee pee Messages postés 39582 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 avril 2024 9 224
26 avril 2022 à 13:38
en mysql cela devrait être

select min(date_MAJ) from test group by DATE_FORMAT(date_MAJ, "%Y/%m");    
0
ayoub36_ah Messages postés 10 Date d'inscription mardi 26 avril 2022 Statut Membre Dernière intervention 2 mai 2022
26 avril 2022 à 13:48
La 1ere requête est bien fonctionnée, sinon pour la 2eme, voilà ce qu'il me dit :

delete from test where date_MAJ not in (select min(date_MAJ) from test group by DATE_FORMAT(date_MAJ, "%Y/%m"))


MySQL said: Documentation

#1093 - You can't specify target table 'test' for update in FROM clause
0
jee pee Messages postés 39582 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 avril 2024 9 224
26 avril 2022 à 14:33
Quand on cherche ce type d'erreur de mysql il est indiqué que l'optimiseur n'accepte pas la même table dans le sous select, il faudrait passer par un niveau supplémentaire :

delete from test where date_MAJ not in 
    (select * from (select min(date_MAJ) from test group by DATE_FORMAT(date_MAJ, "%Y/%m"))  as t)  
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ayoub36_ah Messages postés 10 Date d'inscription mardi 26 avril 2022 Statut Membre Dernière intervention 2 mai 2022
26 avril 2022 à 16:27
j'ai executer votre requête : j'ai cette erreur:

#1292 - Incorrect datetime value: '01/02/2021'

et donc j'ai essayé de mettre la meme format:

delete from test where date_MAJ not in 
(select * from (select min(date_MAJ) from test group by DATE_FORMAT(date_MAJ, "%d/%m/%y")) as t)


et j'ai toujours la meme erreur :

#1292 - Incorrect datetime value: '01/02/2021'
0
jee pee Messages postés 39582 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 avril 2024 9 224
Modifié le 26 avril 2022 à 23:35
Si tu mets un format jma dans le group by tu ne peux pas trouver le premier jour du mois, il faut un critère mois/année

J'imaginais qu'avec plusieurs niveaux de requetes, un champ type date pouvait se retrouver comme une chaine, mais je viens de tester avec un champ type date ou datetime
delete from test where date_MAJ not in 
    (select * from (select min(date_MAJ) from test group by DATE_FORMAT(date_MAJ, "%Y/%m"))  as t) 

chez moi fonctionne bien.

Ton champ date_MAJ est de quel type ? Sinon pas d'autre idée.
0
ayoub36_ah Messages postés 10 Date d'inscription mardi 26 avril 2022 Statut Membre Dernière intervention 2 mai 2022
27 avril 2022 à 10:54
C'est vrai, vous avez raison j'avais un problème au niveau du type de données j'avais un varchar en date_MAj, j'ai pu finalement obtenir le résultat souhaité.

Je vous remercie pour votre aide, vous m'avez vraiment sauvé.

Je vous souhaite une très belle journée
0