Считать дни между двумя датами и исключая выходные - PullRequest
0 голосов
/ 12 ноября 2018

Как мне считать дни между двумя датами, исключая выходные?

У меня есть следующие данные, я могу просто получить значение TAT, просто набрав ClosingDate - ActivityDate.Однако я не хочу рассматривать субботу / воскресенье.

+-------------------------+--------+-------------------------+------+
|      ActivityDate       | TypeID |       ClosedDate        | TAT  |
+-------------------------+--------+-------------------------+------+
| Wednesday, May 02, 2018 |   2502 | Wednesday, May 09, 2018 | 7.00 |
| Monday, May 07, 2018    |   2503 | Thursday, May 10, 2018  | 3.00 |
| Tuesday, May 08, 2018   |   2504 | Friday, May 11, 2018    | 3.00 |
| Wednesday, May 09, 2018 |   2505 | Thursday, May 10, 2018  | 1.00 |
| Thursday, May 10, 2018  |   2506 | Friday, May 11, 2018    | 1.00 |
| Friday, May 11, 2018    |   2507 | Thursday, May 17, 2018  | 6.00 |
| Thursday, May 10, 2018  |   2508 | Tuesday, May 15, 2018   | 5.00 |
| Monday, May 14, 2018    |   2509 | Wednesday, May 16, 2018 | 2.00 |
| Monday, May 14, 2018    |   2510 | Thursday, May 17, 2018  | 3.00 |
+-------------------------+--------+-------------------------+------+

Любая помощь очень ценится.

1 Ответ

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

Как насчет этого?

Я взял только часть вашего набора данных. Идея такова: проверить номер дня (to_char(date, 'd')); если номер дня даты активности (AD) больше, чем дата закрытия (CD), то удалите два дополнительных дня (выходные).

Это может потребоваться изменить, если одна (или обе) из этих дат попадают в субботу или воскресенье (но, согласно вашим выборочным данным, они не совпадают).

SQL> with test (ad, cd) as
  2    (select date '2018-05-02', date '2018-05-09' from dual union all
  3     select date '2018-05-11', date '2018-05-17' from dual union all
  4     select date '2018-05-10', date '2018-05-15' from dual
  5    ),
  6  day_num as
  7    (select ad, cd,
  8      to_char(ad, 'd') addn, to_char(cd, 'd') cddn,
  9      to_char(ad, 'dy') ady, to_char(cd, 'dy') cdy
 10     from test
 11    )
 12  select ad, cd,
 13    cd - ad - case when addn > cddn then 2 else 0 end diff
 14  from day_num;

AD              CD                    DIFF
--------------- --------------- ----------
02.05.2018, wed 09.05.2018, wed          7
11.05.2018, fri 17.05.2018, thu          4
10.05.2018, thu 15.05.2018, tue          3

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...