> Data > Additionner des périodes de date dans une seule instruction SQL

Additionner des périodes de date dans une seule instruction SQL

Data - Par Jef Sutherland - Publié le 20 février 2012
email

“Où en sommes-nous ?” Toute entreprise se pose cette question, à propos des chiffres d'aujourd'hui, du cumul pour le mois ou pour l'année à ce jour.

Ce dossier est issu de notre publication System iNEWS (04/11). Pour consulter les schémas et illustrations associés, rendez-vous dans le club abonnés.

Additionner des périodes de date dans une seule instruction SQL

Généralement, on fait une comparaison entre cette année et la même période de l’année dernière. Le SQL de la figure 5 utilise un sum conditionnel et la BIF SQL dayofyear() pour totaliser le champ des unités vendues, widsold, pour l’année courante et l’année précédente.

La BIF dayofyear() renvoie un nombre de 1 à 365 (ou 366 pour une année bissextile) de la date passée. En utilisant dayofyear() avec la BIF SQL pour la date courante, curdate(), cette instruction totalise les unités vendues si dayofyear() renvoie une valeur de 1 au jour de l’année de la date courante pour chaque ligne dans la table widgets. En B, qui fait partie de la seconde clause sum conditionnelle, l’année courante –1 est utilisée pour obtenir les totaux de l’année dernière jusqu’au même jour de l’année. Voici le résultat obtenu :
 

Constant value THISYEAR LASTYEAR
Year to date: 9,821 9,451

Par la même technique et en ajoutant une vérification pour le mois, il est facile d’obtenir aussi des chiffres mensuels cumulés à ce jour, comme le montre la figure 6.

La BIF dayofyear() est remplacée par dayofmonth() pour renvoyer le jour du mois. J’ai aussi utilisé le BIF monthname() pour renvoyer le nom du mois pour la date courante afin de créer un titre de ligne plus clair, comme ci-dessous :
 

Constant value THISYEARMT LASTYEARMTD
Month to date for July 937 648

Bien entendu, vos résultats seront différents de ceux là parce que, quand vous lirez ces lignes, le mois de juillet 2010 appartiendra au passé !

La complexité d’obtenir un nombre simple

Tout va bien, n’est-ce pas ? Vous pouvez présenter chaque jour à votre patron les chiffres cumulés depuis le début de l’année et du mois. Cependant, pour quelques activités, les ventes du jour de la semaine sont importantes à certains moments de l’année. Le vendredi qui suit Thanksgiving tombe bien sûr toujours un vendredi, mais pas toujours le même quantième du mois. En 2010, Thanksgiving tombe le 25 novembre, en 2009 c’était le 26. Le SQL ci-dessus pour cumul de l’année et cumul du mois (year-to-date / month-to-date) fonctionne, mais quand vous l’exécutez pour le 25 novembre 2010, vous pourriez rater le volume de ventes du 26 novembre 2009. La difficulté est de trouver le même jour de la semaine—en faisant correspondre un mardi à un mardi, un vendredi à un vendredi, etc.—pour le même jour de l’année dernière. J’ai mis un certain temps à trouver cela. Peut-être que des esprits plus brillants ont trouvé un moyen plus facile, mais c’est tout ce que j’ai trouvé. Le SQL de la figure 7 montre le même jour de la semaine pour chaque jour dans la table widgets, avec son même jour correspondant de la semaine l’année dernière. Les résultats se trouvent dans la figure 8.

Pour trouver le même jour de la semaine à partir d’une année précédente, il faut établir une date de base. La BIF next_day() est ma solution parce qu’elle renvoie un tampon horodateur du jour de la semaine pour une date future—dans ce cas, le prochain dimanche pour la même semaine l’année dernière. J’ai à présent une date de base : le dimanche de l’année dernière. Je peux alors utiliser la BIF dayofweek() pour déterminer quel est le jour de la semaine pour chaque ligne dans la table—et retour dans le même jour l’année dernière.

Désormais, je peux utiliser ce processus pour obtenir les chiffres de ventes cumulés de l’année pour le même jour de la semaine, ce qui donne une image plus réaliste du business, comme on le voit dans la figure 9.
 

Téléchargez cette ressource

Sécuriser votre système d’impression

Sécuriser votre système d’impression

Longtemps sous-estimée, la sécurisation d’un système d’impression d’entreprise doit être pleinement prise en compte afin de limiter le risque de fuite d’informations sensibles. Voici les 3 principales précautions à prendre.

Data - Par Jef Sutherland - Publié le 20 février 2012