J'essaie de sélectionner les 6 derniers mois d'entrées dans une table. J'ai une colonne appelée datetime et celle-ci est au format datetime mysql.
J'ai vu de nombreuses manières en utilisant l'intervalle et d'autres méthodes - quelle méthode dois-je utiliser? Merci
Utilisez DATE_SUB
.... where yourdate_column > DATE_SUB(now(), INTERVAL 6 MONTH)
Essaye ça:
select *
from table
where your_dt_field >= date_sub(now(), interval 6 month);
La requête se lit: donnez-moi toutes les entrées dans table
où le champ correspondant à la date d'entrée est plus récent que 6 mois.
J'ai essayé @ user319198 answer d'afficher les 6 derniers mois (somme de) ventes, cela a fonctionné mais j'ai rencontré un problème le mois le plus ancien, je ne reçois pas le montant des ventes de tout le mois. Le résultat commence à partir du jour courant équivalent de ce mois.
Juste je veux partager ma solution si quelqu'un intéressé: -
yourdate_column > DATE_SUB(now(), INTERVAL 7 MONTH)
limit 6
En outre, ce serait formidable si quelqu'un a une meilleure solution pour mon cas J.
Vous pouvez également utiliser TIMESTAMPDIFF
TIMESTAMPDIFF(MONTH, your_date_column, now()) <= 6 )
Pour moi, cela ressemble à une solution puisque je l’utilise avec MariaDB, jetez un coup d’œil à la clause WHERE:
SELECT MONTH(yourTimestampOrDateColumn) AS MONTH, USER, ActionID, COUNT(*) AS TOTAL_ACTIONS, ROUND(SUM(totalpoints)) AS TOTAL_PTS
FROM MyTable
WHERE MONTH(yourTimestampOrDateColumn) BETWEEN MONTH(CURDATE() - INTERVAL 6 MONTH) AND MONTH(CURDATE())
GROUP BY MONTH;
Sur l'image, nous ne voyons que les mois où l'utilisateur avait des données réelles enregistrées dans une base de données (montrant ainsi seulement 4 mois au lieu de 6).
Donc ce mois est le 10 (octobre), il y a 6 mois était le 4ème mois (avril), donc la requête va rechercher cet intervalle (de 4 à 10).
Vous pouvez obtenir les données des six derniers mois en soustrayant interval of 6 month
de CURDATE()
(CURDATE()
est la fonction MySQL qui renvoie la date du jour ).
SELECT * FROM table
WHERE your_date_field >= CURDATE() - INTERVAL 6 MONTH;
Ou vous pouvez utiliser l'opérateur BETWEEN
de MySQL comme ci-dessous:
SELECT * FROM table
WHERE your_date_field BETWEEN CURDATE() - INTERVAL 6 MONTH AND CURDATE();