sql >> Databáze >  >> RDS >> Oracle

Oracle SQL za poslední pracovní den aktuálního měsíce včetně federálních svátků v oracle

Uložte tyto federální svátky do tabulky svátků jako DATE zadejte a zkuste něco takového:Najděte nejstarší ( MAX ) den v posledních sedmi dnech v měsíci, který není sobotou ani nedělí ani svátkem uvedeným v tabulce svátků.

Zde se předpokládá, že 1) ne všech sedm dní na konci měsíce mohou být svátky nebo víkendy a 2) sobota a neděle jsou volné. Můžete upravit level nebo klauzule where podle toho, v závislosti na tom, zda by výše uvedený předpoklad měl vždy platit nebo ne.

SELECT MAX(dt) AS last_working_day 
FROM
(
SELECT last_day(SYSDATE) - level + 1 as dt
FROM dual CONNECT BY
     level <= 7  -- the last seven days of the month
     )  WHERE TO_CHAR(dt,'DY', 'NLS_DATE_LANGUAGE = AMERICAN') NOT IN ('SAT','SUN')
     AND dt NOT IN ( SELECT holiday from federal_holidays );

Mnohem lepším přístupem by bylo mít tabulku Kalendář se všemi daty roku a předdefinovaným sloupcem nazvaným isbusinessday . Pak by byl dotaz mnohem jednodušší.

SELECT MAX(dt)
  FROM calendar
  WHERE isbusinessday = 'Y' 
AND TO_CHAR(dt,'YYYYMM') = TO_CHAR(SYSDATE,'YYYYMM');


  1. Chyba Laravel 5.5 Základní tabulka nebo pohled již existuje:1050 Tabulka 'uživatelé' již existuje

  2. Napište výběrový dotaz pro získání hodnoty tabulky pomocí jiné hodnoty pole tabulky

  3. Jak mohu používat Psycopg2's LoggingConnection?

  4. Jak extrahovat řetězec mezi závorkami v dotazu Oracle SQL