Получить последние 5 дней, исключая выходные дни? - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь извлечь записи из таблицы, вставленной за последние 5 рабочих дней в Oracle SQL, я не могу исключить из этого воскресенье и субботу (поскольку они учитываются)

Select * from xyz where xdate=:businessDate - 5 

Здесь businessDate (формат ггггммдд) - это значение, принятое в качестве параметра

Любые указатели будут высоко оценены.

Ответы [ 5 ]

0 голосов
/ 24 ноября 2018

Узнайте день выходных, то есть воскресенье или субботу, используя формат 'ДЕНЬ' в функции format_date, например:

IF FORMAT_DATE(Date,'DAY')='SATURDAY' then date-1

IF FORMAT_DATE(Date,'DAY')='SUNDAY' then date-2

Вы получите только 5 дней записи

0 голосов
/ 24 ноября 2018

Вам нужно будет сделать что-то вроде следующего:

WITH cteData AS (SELECT TO_DATE(:BUSINESSDATE, 'YYYYMMDD') AS BUSINESS_DATE FROM DUAL)
SELECT * 
  FROM XYZ x
  CROSS JOIN cteData d
  WHERE TRUNC(x.XDATE) BETWEEN d.BUSINESS_DATE - 7
                           AND d.BUSINESS_DATE AND
        TRUNC(x.XDATE) - TRUNC(x.XDATE, 'IW') <= 4
0 голосов
/ 23 ноября 2018

Я не эксперт по оракулам, но это также может сработать

SELECT *
FROM xyz
WHERE xdate IN (:businessDate - 1, :businessDate - 2, :businessDate - 3, :businessDate - 4, :businessDate - 5, :businessDate - 6, :businessDate - 7)  AND MOD(TO_CHAR(xdate, 'J'), 7) + 1 NOT IN (6, 7);
0 голосов
/ 24 ноября 2018

Я бы сделал:

select * from xyz 
 where xdate >= TO_DATE( :businessDate, 'yyyymmdd' ) - 7
   and to_char( xdate, 'DAY' ) not in ( 'SAT', 'SUN' )

Это предполагает, что вы работаете в английской базе данных.Это должно дать вам ценность последних 7 дней, но исключая выходные.

0 голосов
/ 23 ноября 2018
SELECT * 
FROM xyz
WHERE 
  xdate >= TRUNC(SYSDATE) - 7 --last 7 days AND 
  TRUNC (xdate) - TRUNC (xdate, 'IW') NOT IN (5,6) --not sat or sun

Возьмите данные за последние 7 дней и удалите все данные в субботу или воскресенье.

TRUNC (xdate) - TRUNC (xdate, 'IW') возвращает значение от 0 до 6 включительно.0 понедельник.На это не влияют настройки даты NLS, поскольку она использует одинаковые настройки региона в обеих магистралях, поэтому независимо от того, начинается ли неделя в воскресенье или понедельник в вашей стране, результат вычисления будет одинаковым

В любом заданном7-дневный период у вас есть 5 дней и 2 дня выходных

Обратите внимание, что в этом запросе предполагается, что в таблице нет данных с датой в будущем.Если есть ограничение, xdate должно быть меньше sysdate

...