SQL: Datum des ersten und letzten Auftretens eines bestimmten Wochentages in einem Monat ermitteln

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Für diese Aufgabe kann man mittels Pivotisierung alle Wochentage des Monats in einer Abfrage erstellen, mit einer entsprechenden Funktion die Wochentage herausfiltern, und davon das Minimum und das Maximum ausgeben.


Es sollen z.B. der erste und letzte Dienstag des aktuellen Monats ermittelt werden.

Lösung für Jet-SQL

Hinweis für Access-Anwender
Um die folgende Abfrage selbst testen zu können, muss die Pivottabelle t1000 vorhanden sein.

SELECT min( di ) AS erster_di,
       max( di ) AS letzter_di
FROM   ( SELECT DateSerial( Year( Now() ), Month( Now() ), 1 ) + n AS di
         FROM   t1000
         WHERE  DateSerial( Year( Now() ), Month( Now() ), 1 ) + n
              < DateSerial( Year( Now() ), Month( Now() ) + 1, 1 ) AND
                Weekday( DateSerial( Year( Now() ), Month( Now() ), 1 ) + n, 2 ) = 2 ) AS v

Lösung für PostgreSQL

SELECT MIN( dt )::DATE AS erster_di,
       MAX( dt )::DATE AS letzter_di  
FROM   generate_series( date_trunc( 'MONTH', now() ),
                        date_trunc( 'MONTH', now() ) + INTERVAL '1 MONTH - 1 DAY',
                        INTERVAL '1 DAY' ) AS dt
WHERE  EXTRACT( 'ISODOW' FROM dt ) = 2



Zurück zur Übersicht