Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1436 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Résultats des 6 derniers mois

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Résultats des 6 derniers mois

n°2467094
bingojm
Posté le 02-04-2024 à 11:53:30  profilanswer
 

Bonjour à tous,
 
J'ai un souci avec une condition pour afficher les résultats des 6 derniers mois.
Tout fonctionnait bien l'année dernière, mais depuis que nous sommes passés en 2024, cela ne va plus.
Je cherche donc à afficher les résultats des 6 derniers mois. Nous sommes en avril, il faut donc afficher les résultats de octobre 2023 à mars 2024.
Voici mon code:

Code :
  1. LEFT JOIN leads_liste l1 ON membres_liste.id_membre = l1.auteur
  2.   AND MONTH(l1.date) BETWEEN MONTH(CURRENT_DATE - INTERVAL 6 MONTH) AND MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
  3.   AND YEAR(l1.date) BETWEEN YEAR(CURRENT_DATE - INTERVAL 6 MONTH) AND YEAR(CURRENT_DATE - INTERVAL 1 MONTH)


 
Pouvez-vous m'aider?
 
Merci d'avance!

mood
Publicité
Posté le 02-04-2024 à 11:53:30  profilanswer
 

n°2467095
slr56
Tout problème a sa solution.
Posté le 02-04-2024 à 12:07:37  profilanswer
 

bingojm a écrit :

Bonjour à tous,
 
J'ai un souci avec une condition pour afficher les résultats des 6 derniers mois.
Tout fonctionnait bien l'année dernière, mais depuis que nous sommes passés en 2024, cela ne va plus.
Je cherche donc à afficher les résultats des 6 derniers mois. Nous sommes en avril, il faut donc afficher les résultats de octobre 2023 à mars 2024.
Voici mon code:

Code :
  1. LEFT JOIN leads_liste l1 ON membres_liste.id_membre = l1.auteur
  2.   AND MONTH(l1.date) BETWEEN MONTH(CURRENT_DATE - INTERVAL 6 MONTH) AND MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
  3.   AND YEAR(l1.date) BETWEEN YEAR(CURRENT_DATE - INTERVAL 6 MONTH) AND YEAR(CURRENT_DATE - INTERVAL 1 MONTH)


 
Pouvez-vous m'aider?
 
Merci d'avance!


 
 
Bonjour,
 
Je ne suis pas expert SQL mais pour moi le "And Year..." n'est pas utile à moins de vouloir spécifier une année antérieure à 2024 au lieu de current_date et je dirais qu'il manque des parenthèses.
 
Je ferais quelque chose comme ça :
 

Code :
  1. EFT JOIN leads_liste l1 ON membres_liste.id_membre = l1.auteur
  2.   AND MONTH(l1.date) BETWEEN (MONTH(CURRENT_DATE - INTERVAL 6 MONTH) AND MONTH(CURRENT_DATE - INTERVAL 1 MONTH))


---------------
Configurations type du moment : https://forum.hardware.fr/hfr/Hardw [...] 1331_1.htm  https://www.jouannetphotographe.com
n°2467098
bingojm
Posté le 02-04-2024 à 12:22:20  profilanswer
 

J'avais cru comprendre qu'il fallait ajouter YEAR quand on se retrouve avec des résultats sur des années différentes.
 
Aussi, en ajoutant les parenthèses, j'ai un message d'erreur de syntaxe. Il ne les faut donc pas. En 2023, je n'ai eu aucun souci! C'est juste depuis qu'on a des résultats sur 2 années que ça pose problème. C'est pour ça que j'ai ajouté YEAR, mais cela n'est pas suffisant... Je n'ai pas de message d'erreur, mais juste aucun résultat qui s'affiche...

n°2467192
bingojm
Posté le 03-04-2024 à 16:46:57  profilanswer
 

Pas d'idée pourquoi cela ne fonctionne pas svp?

n°2467195
mechkurt
Posté le 03-04-2024 à 17:29:45  profilanswer
 

Et un truc du genre :

Code :
  1. l1.date >= last_day(current_date()) + interval 1 day - interval 6 month


https://stackoverflow.com/questions [...] rent-month


---------------
D3
n°2467216
bingojm
Posté le 03-04-2024 à 22:52:09  profilanswer
 

Merci mais je veux récupérer les 6 derniers mois entiers avant le mois actuel. Donc pas par rapport à aujourd’hui. Vu que nous sommes en avril, il me faut donc les résultats du 1/10/2033 au 31/3/2024.  
Merci!

n°2467224
mechkurt
Posté le 04-04-2024 à 08:16:24  profilanswer
 

Code :
  1. [...] AND  AND l1.date < last_day(current_date() - interval 1 month)  :o


C'est ptet un <=, faut ptet préciser 23:59:59, j'ai pas d’échantillon de donnée me permettant de tester.
Après tu peux aussi bidouiller dans phpmyadmin pour tester toi même ce qui va fonctionner hein...

Message cité 1 fois
Message édité par mechkurt le 04-04-2024 à 08:18:22

---------------
D3
n°2467287
bingojm
Posté le 04-04-2024 à 20:47:01  profilanswer
 

mechkurt a écrit :

Code :
  1. [...] AND  AND l1.date < last_day(current_date() - interval 1 month)  :o


C'est ptet un <=, faut ptet préciser 23:59:59, j'ai pas d’échantillon de donnée me permettant de tester.
Après tu peux aussi bidouiller dans phpmyadmin pour tester toi même ce qui va fonctionner hein...


 
Merci mechkurt! Je ne connaissais as last_day. Ca avance!
Voici ce que j'ai fait:

Code :
  1. AND l1.date >= last_day(current_date()) + interval 1 day - interval 7 month
  2.             AND l1.date <= last_day(current_date() - interval 1 month)


Cela fonctionne bien, sauf qu'effectivement il ne prend pas les enregistrements du 31/3/2024.
Ca irait en ajoutant  23:59:59? mais peux-tu me dire comment? Mes tentatives ne sont pas correctes...
Merci d'avance

n°2467298
mechkurt
Posté le 04-04-2024 à 23:49:03  profilanswer
 

https://sqlfiddle.com/mysql/online- [...] 51ebcdc124

Code :
  1. SET
  2. @debut = last_day(current_date() - interval 7 month) + interval 1 day,
  3. @fin = last_day(current_date() - interval 1 month) + interval 1 day;
  4. CREATE TABLE `test` (
  5.   `id` int(11) NOT NULL,
  6.   `date` timestamp NOT NULL,
  7.   `commentaire` varchar(10) NOT NULL
  8. );
  9. ALTER TABLE `test`
  10.   ADD PRIMARY KEY (`id`),
  11.   ADD KEY `date` (`date`);
  12. INSERT INTO `test`(`id`, `date`, `commentaire`) VALUES
  13. ('1', '2023-09-30 01:23:45', 'trop tôt'),
  14. ('2', '2023-10-01 01:23:45', 'ok'),
  15. ('3', '2023-11-11 01:23:45', 'ok'),
  16. ('4', '2023-12-12 01:23:45', 'ok'),
  17. ('5', '2024-01-01 01:23:45', 'ok'),
  18. ('6', '2024-02-02 01:23:45', 'ok'),
  19. ('7', '2024-03-31 01:23:45', 'ok'),
  20. ('8', '2024-04-01 01:23:45', 'trop tard');
  21. SELECT @debut, @fin;
  22. SELECT * FROM `test` WHERE `date` >= @debut AND `date` < @fin;


Ce serait probablement plus performant si tu avais un champ date au lieu de datetime ou timestamp, mais c'est le type de champ que tu dois avoir si il te manque le dernier jour car en faisant une comparaison avec un date convertit en datetime tu  te retrouves avec 00:00:00, ce qui n'est pas gênant pour la borne de début mais ce qui oblige d'avoir un < et le premier jour du mois d'après pour la borne de fin.
https://stackoverflow.com/questions [...] -inclusive


---------------
D3
n°2467481
bingojm
Posté le 08-04-2024 à 11:37:04  profilanswer
 

Merci beaucoup. J'y suis arrivé.
Pour ceux que ça intéresse:

Code :
  1. AND l1.date >= DATE_FORMAT(NOW() - INTERVAL 6 MONTH, '%Y-%m-01 00:00:00') -- Premier jour du mois, il y a 6 mois
  2.    AND l1.date <= DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 1 MONTH), '%Y-%m-%d 23:59:59') -- Dernière seconde du dernier jour du mois précédent

mood
Publicité
Posté le 08-04-2024 à 11:37:04  profilanswer
 

n°2467490
mechkurt
Posté le 08-04-2024 à 13:08:16  profilanswer
 

De rien, effectivement avec DATE_FORMAT on peut force l'heure, par contre sur les stackoverflow que je t'ai link les gens déconseillent <= le dernier jour 23:59:59 et encourage plutôt a faire < du lendemain.
Pourquoi, pacque le format de temps SQL peut aussi avoir des milliseconde sous forme d'un point après les secondes.
 
Tu peux soit continuer comme tu le fait et corriger avec  '%Y-%m-%d 23:59:59.999', soit comme je te le conseillais à la base faire un < LAST_DAY(NOW() - INTERVAL 1 MONTH) + INTERVAL 1 DAY.
Après tu n'est probablement pas dans un cas ou tu as besoin de cette précision mais c'est bon à savoir...


---------------
D3
n°2467540
rufo
Pas me confondre avec Lycos!
Posté le 09-04-2024 à 13:33:30  profilanswer
 

Ah, il est donc sur Mysql apparemment :)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2467541
rufo
Pas me confondre avec Lycos!
Posté le 09-04-2024 à 13:38:57  profilanswer
 

bingojm a écrit :

Merci beaucoup. J'y suis arrivé.
Pour ceux que ça intéresse:

Code :
  1. AND l1.date >= DATE_FORMAT(NOW() - INTERVAL 6 MONTH, '%Y-%m-01 00:00:00') -- Premier jour du mois, il y a 6 mois
  2.    AND l1.date <= DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 1 MONTH), '%Y-%m-%d 23:59:59') -- Dernière seconde du dernier jour du mois précédent



Pourquoi tu formaterais pas plutôt ton champ "date" vu que les heures ne t'intéressent pas ??
 

Code :
  1. AND DATE_FORMAT(l1.date, '%Y-%m-01') BETWEEN DATE_SUB(now(), INTERVAL 6 MONTH) AND LAST_DAY(NOW() - INTERVAL 1 MONTH)


Message édité par rufo le 09-04-2024 à 13:39:12

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Résultats des 6 derniers mois

 

Sujets relatifs
Regrouper plusieurs résultats sur une seule ligneRetirer les 7 derniers caractères de nom de fichiers
Créer une appli android de sondage et publier les résultatsChanger la couleur des liens déjà vus des résultats google search
Twitter : 4 encarts home made contenant les 4 derniers tweetsTwig et nom de mois en français
[MySQL] - Sélection d'un relevé du mois précédentMSSQL Obtenir les dates du début du mois en cours jusqu’à hier
cos me retourne des résultats différentsdupliquer une feuille de mon classeur chaque mois
Plus de sujets relatifs à : Résultats des 6 derniers mois


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR