大家早上好。 我遇到了问题,我想您可以帮助我。
我需要一个函数,该函数可以返回当前日期后的最近5个工作日。考虑到当前日期,我已经可以带上所有工作日了,但是我真正需要的是过去5天。
我按此顺序需要它们,例如:
Thursday: 27/12/2018
Wednesday 26/12/2018
Monday 24/12/2018
Friday 21/12/2018
Thursday 20/12/2018
答案 0 :(得分:2)
像这样吗?
SQL> create table holidays (datum date);
Table created.
SQL> insert into holidays
2 select date '2018-12-25' from dual union
3 select date '2018-12-26' from dual union
4 select date '2019-01-01' from dual;
3 rows created.
SQL> with calendar as
2 (select trunc(sysdate) - 15 + level datum
3 from dual
4 connect by level <= 15
5 ),
6 inter as
7 (select datum,
8 to_char(datum, 'day') n_day,
9 row_number() over (order by datum desc) rn
10 from calendar
11 where to_char(datum, 'dy', 'nls_date_language=english') not in ('sat', 'sun')
12 and datum not in (select datum from holidays)
13 )
14 select datum, n_day
15 from inter
16 where rn <= 5
17 order by datum desc;
DATUM N_DAY
---------- ---------
28/12/2018 friday
27/12/2018 thursday
24/12/2018 monday
21/12/2018 friday
20/12/2018 thursday
SQL>
HOLIDAYS
表包含应从列表中删除的日期;我在克罗地亚放了几个假期。您的外观可能会有所不同。CALENDAR
CTE使用分层查询返回最近7天(一周)TO_CHAR
以及dy
格式的掩码和日期语言设置为英语(如果使用其他语言,请注意日期名称),将删除星期六和星期日(周末)ROW_NUMBER
用于对日期进行“排序”,以便您可以选择最近5个工作日