J'ai une installation de base de données MySQL à jour et j'ai besoin d'une fonction pour calculer les ventes entre le NTH du mois dernier et aujourd'hui. La fonction sera appelée plusieurs fois par jour car je recherche le point à laquelle les ventes cumulatives depuis le nième du mois précédent se croisent un seuil. P>
Le fond est que je développe un site d'abonnement. Les clients s'inscrivont sur les jours ad hoc de l'année et effectueront des achats tout au long de l'année. Je veux pouvoir calculer les ventes sur la base du mois à date. p>
Si un client s'inscrit au NTH du mois, je dois calculer les ventes entre le NTH précédent du mois et aujourd'hui. P>
Si le client s'inscrit le 28 et aujourd'hui est le 30, alors vous penseriez qu'il n'y avait que 2 jours de vente, mais si aujourd'hui est le 30 mars, cela fait 30 jours. Dans un autre exemple: si le client s'inscrit le 31 octobre, comment cela le foi le 28 février ou le 30 avril? P>
J'ai examiné des fonctions telles que TIMESTAMPDIFF () mais ne peut pas comprendre une solution pratique. En cela, je veux dire un qui fera le travail et peut faire la tâche efficacement sans coûter de nombreux cycles de processeur. P>
merci d'anticipation p>
3 Réponses :
Vous recherchez peut-être quelque chose comme: donné un nombre de jours à compter d'aujourd'hui, lorsque cela est donné 15 jours, cela donne Si vous voulez vous assurer que la date renvoyée ne dépassera jamais le dernier jour du mois dernier (comme: le mois en cours est mars et typiquement, ceci: p> a choisi: n code>, il renvoie le n code> Le mois dernier. P> '2018-12-15' code> (15ème jour du mois dernier, par exemple le 15 décembre 2018). P> n = 31 code>), vous pouvez utiliser: < / p> '2018-02-28' code> - (le dernier jour de février). P> p>
J'aime le regard de cela, mais je me demande comment il se comporte lorsque l'intervalle est défini sur 31 et le mois précédent ne s'étend pas aussi loin? (Février, avril, jun, etc ...)
Eh bien, 31 jours après le 1er février, c'est le 3 mars, et c'est ce que la requête reviendra dans cette affaire ... Sélectionnez Date_add (last_day (date_sub ('2018-03-28', intervalle 2 mois)), Intervalle 31 Jour) code>
Que voulez-vous voir dans ce cas d'utilisation: 28 février?
Bonjour GMB Je ne veux pas vraiment définir un intervalle, je veux lire la dayofmonth de l'enregistrement créé lorsque l'utilisateur a commencé son abonnement. Disons qu'ils ont commencé leur abonnement au 31 d'un mois. Quand je vais au 30e mois, tout ira bien, mais le lendemain, il y a un problème si le lendemain est le 1er
Le jour du mois que j'ai lu depuis le dossier de la date d'abonnement est corrigé, je dois donc travailler avec ce numéro, puis de déterminer comment gérer les subtilités du calendrier.
Je pourrais recommander horodatage et intervalle. Il est simple et efficace sans qu'il soit nécessaire d'essayer de faire quelque chose d'assez trivial
alors considérez le schéma et la requête suivants p> mises à jour, car je n'ai pas à l'origine pas Comprenez parfaitement la question. J'ai gardé l'horodatage cependant et j'ai fait des corrections que je n'ai pas remarquées plus tôt. P> et lorsque vous êtes assez confiant pour que cela puisse faire le travail P> < Pré> xxx pré> espère que cela fera l'affaire cette fois. p> p>
Merci pour cela, mais malheureusement, cela ne traite pas du défi majeur. Cela calcule les ventes du mois passé, mais j'en ai besoin pour calculer les ventes depuis le Nième jour du mois précédent où N peut être un nombre qui n'existe pas le mois précédent. Par exemple: Si N = 30 et aujourd'hui = 29 mars, il doit être calculé à partir du 28 février (ou 29) à aujourd'hui.
Merci à vous deux pour vos contributions. J'avais déjà passé plusieurs heures à regarder dans la question et certaines des réponses les plus prometteuses provenaient de Stackoverflow, c'est pourquoi je pensais poster ma question ici. P>
Je conviens que la question est mal formée après avoir passé beaucoup plus de temps à essayer de définir le problème. En conséquence, je vais changer le problème en quelque chose qui soit facilement résolu. P>
Plutôt que de compter sur la date d'abonnement, je vais courir sur une base mensuelle du calendrier. Ces forces changent ailleurs mais je pense que je peux vivre avec eux. P>
Merci encore p>