J'ai un rapport hebdomadaire qui utilise ces paramètres de date:
SELECT * FROM TABLE WHERE DATE_FIELD BETWEEN (CURRENT DATE - 8 DAYS) AND (CURRENT DATE - 2 DAYS)
Il s'exécute le lundi pour collecter les données de la semaine précédente (dim-sam). Ce que je veux maintenant, c'est l'exécuter pour la même semaine de l'année précédente.
Par exemple, si le code ci-dessus s'exécute le lundi 29/06/20, il renvoie les données du dimanche 21/06 / 20 - Sam 27/06/20, soit la semaine 26 de 2020. Je veux qu'il renvoie les données du dim 23/06/19 au sam 29/06/19, soit la semaine 26 de 2019.
Le Le rapport s'exécute automatiquement, donc je ne peux pas simplement brancher les dates exactes à chaque fois. Je ne peux pas non plus simplement compenser les paramètres de date à -357 et -367 jours, car cela est gâché par les années bissextiles.
J'ai cherché des solutions, mais elles semblent toutes s'appuyer sur la fonction DATEADD , que ma base de données DB2 ne reconnaît pas.
Quelqu'un sait-il comment je peux obtenir le résultat que je recherche, s'il vous plaît? Tout avis sera le bienvenu! :)
3 Réponses :
Si vous supposez que toutes les années ont 52 semaines, vous pouvez utiliser l'arithmétique des dates:
SELECT * FROM TABLE WHERE DATE_FIELD BETWEEN (CURRENT DATE - (8 + 364) DAYS) AND (CURRENT DATE - (2 + 364) DAYS)
Parce que vous voulez que la semaine commence un lundi, cela ne doit pas prendre des années bissextiles en compte. Cela soustrait exactement 52 semaines - et les années bissextiles n'affectent pas les semaines.
Cela devient plus compliqué si vous devez gérer des années de 52 ou 53 semaines.
Un peu compliqué, mais ça devrait marcher. Vous pouvez l'exécuter tel quel ou tester votre propre date.
SELECT YEAR_1ST_WEEK_END + WEEKS_TO_ADD * 7 - 6 AS WEEK_START , YEAR_1ST_WEEK_END + WEEKS_TO_ADD * 7 AS WEEK_END FROM ( SELECT DATE((YEAR(D) - 1)||'-01-01') + (7 - DAYOFWEEK(DATE((YEAR(D) - 1)||'-01-01'))) AS YEAR_1ST_WEEK_END , WEEK(D) - 2 AS WEEKS_TO_ADD FROM (VALUES DATE('2020-06-29')) T(D) );
La valeur de la colonne intermédiaire YEAR_1ST_WEEK_END
est le 1er samedi (fin de semaine) de l'année précédente pour date donnée.
WEEKS_TO_ADD
est un nombre de semaines à ajouter à la date YEAR_1ST_WEEK_END
.
Le moyen le plus simple de le faire est de créer un calendrier ou un tableau de dates ... (google sql calendar table
)
Parmi les colonnes que vous auriez, il y aurait
Vous pouvez utiliser les fonctions week () ou week_iso () lors du chargement de la table, faites attention aux différences et choisissez celle qui vous convient le mieux.
Un tel tableau de calendrier permet de comparer facilement la période actuelle à la période précédente.