这是一个(有点)复杂的问题,至少据我所知,因为您必须检索给定日期范围内的所有日期,然后检查每个日期以查看它是周末日还是if这是一个假日。以下是我如何去做这件事:
WITH d1 AS (
SELECT id, added_date
, added_date + LEVEL AS range_date
FROM process_request
CONNECT BY added_date + LEVEL < TRUNC(SYSDATE+1)
AND PRIOR id = id
AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
)
SELECT d1.id, d1.added_date, TRUNC(SYSDATE), COUNT(*) AS business_day_cnt
FROM d1
WHERE TO_CHAR(d1.range_date) NOT IN ('SAT','SUN')
AND NOT EXISTS (SELECT 1 FROM holiday_table ht
WHERE TRUNC(ht.holiday_date) = TRUNC(d1.range_date))
GROUP BY d1.id, d1.added_date
ORDER BY id
我会把SQL小提琴放在一起,但我现在有问题连接。在我们的CTE(d1
)中,我使用CONNECT BY
和LEVEL
获取added_date
与今天的日期(包括今天的日期,但不包括added_date
)之间的所有日期。然后我得到了所有这些日子中的id
的一个计数,不包括那些周末的日子和那些与HOLIDAY_TABLE
中给出的日期相对应的日子。
更新 - SQL Fiddle Here
还有,你试过吗? – 2015-02-23 21:11:21
@JackManey ..我的歉意我忘了提及。我已经获得了sysdate和added_date之间的日期差异。 – 2015-02-23 21:26:07
好的,现在你怎么知道给定的日期是否在周末? – 2015-02-23 21:32:32