-2
votes

Comment puis-je calculer efficacement les ventes depuis le Nième jour du mois?

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.

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.

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.

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?

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.

merci d'anticipation


0 commentaires

3 Réponses :


0
votes

Vous recherchez peut-être quelque chose comme: xxx

donné un nombre de jours n , il renvoie le n Le mois dernier.

à compter d'aujourd'hui, lorsque cela est donné 15 jours, cela donne '2018-12-15' (15ème jour du mois dernier, par exemple le 15 décembre 2018).

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 n = 31 ), vous pouvez utiliser: < / p> xxx

typiquement, ceci: xxx

a choisi: '2018-02-28' - (le dernier jour de février).


5 commentaires

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)


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.



0
votes

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 xxx

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. xxx

et lorsque vous êtes assez confiant pour que cela puisse faire le travail < Pré> xxx

espère que cela fera l'affaire cette fois.


1 commentaires

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.



0
votes

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.

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.

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.

Merci encore


0 commentaires