SQL Selektion: Immer nur montags bis freitags
Gesucht war eine Möglichkeit, als Berichtszeitraum immer nur von Montag bis Freitag der Vorwoche oder der ablaufenden Woche zu selektieren. Ab Freitag (-nacht), Samstag und Sonntag sollte immer die aktuelle Woche selektiert werden, sonst die Vorwoche.
Beispiel: Am Ender einer Woche sollen in einer Bank nur die Buchungen, oder in einer Farbrik nur die Fertigunsprozesse der abgelaufenen, oder sonst der vorhergeheden Woche selektiert werden.
-- 1 CURRENT_WEEKDAY MONDAY FRIDAY -- ---------- --------------- ---------- ---------- -- 2017-04-01 7 2017-03-27 2017-03-31 SELECT DATE('1.4.2017'), DAYOFWEEK( DATE('1.4.2017') ) AS CURRENT_WEEKDAY, CASE WHEN DAYOFWEEK( DATE('1.4.2017') ) < 6 THEN DATE('1.4.2017') - (5 + DAYOFWEEK( DATE('1.4.2017') ) ) DAYS ELSE DATE('1.4.2017') - (DAYOFWEEK(DATE('1.4.2017') ) -2 ) DAYS END AS MONDAY, CASE WHEN DAYOFWEEK( DATE('1.4.2017') ) < 6 THEN DATE('1.4.2017') - (1 + DAYOFWEEK( DATE('1.4.2017') ) ) DAYS ELSE DATE('1.4.2017') + (6 - DAYOFWEEK( DATE('1.4.2017')) ) DAYS END AS FRIDAY FROM SYSIBM.SYSDUMMY1; -- 1 CURRENT_WEEKDAY MONDAY FRIDAY -- ---------- --------------- ---------- ---------- -- 2017-04-07 6 2017-04-03 2017-04-07 SELECT DATE('7.4.2017'), DAYOFWEEK( DATE('7.4.2017') ) AS CURRENT_WEEKDAY, CASE WHEN DAYOFWEEK( DATE('7.4.2017') ) < 6 THEN DATE('7.4.2017') - (5 + DAYOFWEEK( DATE('7.4.2017') ) ) DAYS ELSE DATE('7.4.2017') - (DAYOFWEEK(DATE('7.4.2017') ) -2 ) DAYS END AS MONDAY, CASE WHEN DAYOFWEEK( DATE('7.4.2017') ) < 6 THEN DATE('7.4.2017') - (1 + DAYOFWEEK( DATE('7.4.2017') ) ) DAYS ELSE DATE('7.4.2017') + (6 - DAYOFWEEK( DATE('7.4.2017')) ) DAYS END AS FRIDAY FROM SYSIBM.SYSDUMMY1;
Am Freitag, Samstag und Sonntag wird der Zeitraum von Montag bis Freitag derselben Woche ermittelt, sonst immer der Zeitraum der Vorwoche.
Statt eines statischen Datums kann/muss natürlich der Unternehmens-Buchungstag/Fertigungstag/Valuta aus einer zentralen Tabelle, oder das Tagesdatum CURRENT DATE verwendet werden. Und so ganz atomar betrachtet macht das SELECT-Statement wenig Sinn, sondern muss mit weiterer, betriebswirtschaftlicher Logik verbunden werden, z.B in einem vorgelagerten WITH-Statement verbunden mit der gewünschten Logik zur Auswahl der Unternehmendaten.
Weiter Vorschläge zur Lösung solcher und ähnlicher SQL-Probleme sind willkommen!
Comments
Comments are closed.