Как получить данные между текущей датой и текущей датой + 2, но исключить выходные? - PullRequest
0 голосов
/ 31 января 2020

У меня есть отчет, который запускается ежедневно, он показывает количество заказов, но между sysdate и sysdate +2. Единственная проблема заключается в том, что мы не работаем в выходные дни, никогда не было записей для SAT / SUN.

Когда отчет запускается в пятницу, чтобы забрать заказы сегодня и в понедельник, понедельник игнорируется, потому что sysdate + 2 включает выходные. Так что это только возврат заказов на сегодня.

Я дошел до этого далеко, но он все еще не полностью игнорирует SAT / SUN, но исключил бы его, только если бы он действительно существовал.

Любой идеи?

SELECT order_header.ship_by_date 
FROM order_header 
WHERE (order_header.ship_by_date >= TRUNC(sysdate) AND order_header.ship_by_date < TRUNC(SYSDATE) + 2 
    AND 
       (order_header.ship_by_date IN (SELECT order_header.ship_by_date 
        FROM ORDER_HEADER 
        WHERE TO_CHAR(order_header.ship_by_date, 'DAY') NOT IN ('SAT','SUN'))))

Ниже приведен запрос, который я запустил:

 FROM order_header
WHERE     order_header.ship_by_date >= TRUNC (SYSDATE)
       AND order_header.ship_by_date <
                TRUNC (SYSDATE)
              + CASE WHEN TO_CHAR (SYSDATE, 'DY') = 'FRIDAY' THEN 4 ELSE 2 END```

Results returned:

   SHIP_BY_DATE
31-JAN-20 00.00.00.000000000
31-JAN-20 00.00.00.000000000
31-JAN-20 00.00.00.000000000
31-JAN-20 00.00.00.000000000
31-JAN-20 00.00.00.000000000
31-JAN-20 00.00.00.000000000

Если я запускаю этот запрос, я получаю результаты понедельника, но это не помогает, так как включает в себя сБ / SUN. Вы можете увидеть, как вернулись 31-Ян и 03-Фев.

  FROM order_header
 WHERE order_header.ship_by_date >= TRUNC (SYSDATE)
        AND order_header.ship_by_date <
                 TRUNC (SYSDATE) +4

SHIP_BY_DATE
31-JAN-20 10.14.00.000000000
31-JAN-20 10.17.00.000000000
31-JAN-20 11.09.00.000000000
31-JAN-20 11.20.00.000000000
03-FEB-20 00.00.00.000000000
03-FEB-20 00.00.00.000000000

1 Ответ

1 голос
/ 31 января 2020

Если сегодня пятница, добавьте 4 дня вместо 2:

SELECT order_header.ship_by_date
  FROM order_header
 WHERE (    order_header.ship_by_date >= TRUNC (SYSDATE)
        AND order_header.ship_by_date <
                 TRUNC (SYSDATE)
               + CASE WHEN TO_CHAR (SYSDATE, 'DY') = 'FRI' THEN 4 ELSE 2 END     --> this
        AND (order_header.ship_by_date IN (SELECT order_header.ship_by_date
                                             FROM ORDER_HEADER
                                            WHERE TO_CHAR (
                                                     order_header.ship_by_date,
                                                     'DY') NOT IN ('SAT', 'SUN'))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...