【发布时间】:2020-11-14 13:00:37
【问题描述】:
我有一个 Oracle 查询,它使用 DUAL 在子查询中生成日期列表,以及何时确定工作日:
SELECT DATES
,case when to_char(DATES, 'd') in (1,7)
then 0
else 1 end as business_day
FROM (
SELECT to_date('1/1/2020','MM/DD/YYYY') + (LEVEL -1) AS DATES
FROM DUAL connect by level <=(to_date('1/1/2021','MM/DD/YYYY') - to_date('1/1/2020','MM/DD/YYYY'))
) L1
到目前为止一切顺利。现在,当我将它嵌套在子查询中并添加 row_number() 函数时,我所有的 business_day 值都变为 0。如果我删除 row_number() 函数,business_day 就会恢复正常。
SELECT L2.DATES
, L2.business_day
, row_number() OVER (PARTITION BY L2.business_day ORDER BY L2.DATES ASC) as dateindex
FROM (
SELECT DATES
,case when to_char(DATES, 'd') in (1,7)
then 0
else 1 end as business_day
FROM (
SELECT to_date('1/1/2020','MM/DD/YYYY') + (LEVEL -1) AS DATES
FROM DUAL connect by level <=(to_date('1/1/2021','MM/DD/YYYY') - to_date('1/1/2020','MM/DD/YYYY'))
) L1
) L2
知道添加新列如何导致其他列的值发生变化吗?
【问题讨论】:
标签: oracle date sql-order-by window-functions recursive-query