You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在现有PL/SQL脚本中新增年度周一日期列

问题描述

我有如下PL/SQL脚本:

WITH
                date_range (mydate)
                AS
                    (    SELECT TRUNC (SYSDATE - 7, 'mm') - 1 + LEVEL
                           FROM DUAL
                     CONNECT BY LEVEL <=
                                  TRUNC (ADD_MONTHS (SYSDATE - 7, 12), 'mm')
                                - TRUNC (SYSDATE - 7, 'mm')),
                weeknum_per_date (mydate, nr_of_sundays)
                AS
                    (SELECT mydate,
                                (  TRUNC (mydate, 'day')
                                 - TRUNC (TRUNC (mydate, 'yyyy'), 'day'))
                              / 7
                            + CASE
                                  WHEN TO_CHAR (TRUNC (mydate, 'YYYY'),
                                                'day') =
                                       'sun'
                                  THEN
                                      1
                                  ELSE
                                      0
                              END    AS nr_of_sundays
                       FROM date_range)
              SELECT TO_CHAR (mydate, 'YYYY')    AS year,
                     LISTAGG (
                         DISTINCT TO_CHAR (TRUNC (mydate, 'MONTH'), 'MONTH'),
                         ', ')                   AS MONTHS,
                     (nr_of_sundays + 1)         week_num
                FROM weeknum_per_date
               WHERE TO_DATE (mydate, 'DD/MM/YY') >=
                     TO_DATE (SYSDATE - 7, 'DD/MM/YY')
            GROUP BY (nr_of_sundays + 1), TO_CHAR (mydate, 'YYYY')
            ORDER BY TO_CHAR (mydate, 'YYYY'),
                     TO_CHAR (nr_of_sundays + 1, 'fm00');

该脚本返回年份、当周所属月份、年度周数。

我希望在不改动原有可运行代码逻辑的前提下,新增一列展示年度内每周的周一日期。

原脚本返回结果示例:
YEAR| MONTHS| WEEK_NUM
2023| APRIL| 15
2023| APRIL| 16
2023| APRIL| 17
2023| APRIL , MAY| 18
2023| MAY| 19
......
(共52周)

期望的返回结果示例:
YEAR| MONTHS| WEEK_NUM| MONDAY_DATE_OF_THE_WEEK
2023| APRIL| 15| 17.04.2023
2023| APRIL| 16| 24.04.2023
2023| APRIL| 17| 01.05.2023
2023| APRIL , MAY| 18| 08.05.2023
2023| MAY| 19| 15.05.2023
......
(共52周)

请问如何实现该需求?

解决方案

经过@Paul W的解答并结合LEAD函数后,以下脚本可返回预期结果(虽可能存在更优方案,但已满足需求):

WITH
                date_range (mydate)
                AS
                    (    SELECT TRUNC (SYSDATE - 7, 'mm') - 1 + LEVEL
                           FROM DUAL
                     CONNECT BY LEVEL <=
                                  TRUNC (ADD_MONTHS (SYSDATE - 7, 12), 'mm')
                                - TRUNC (SYSDATE - 7, 'mm')),
                weeknum_per_date (mydate, nr_of_sundays)
                AS
                    (SELECT mydate,
                                (  TRUNC (mydate, 'day')
                                 - TRUNC (TRUNC (mydate, 'yyyy'), 'day'))
                              / 7
                            + CASE
                                  WHEN TO_CHAR (TRUNC (mydate, 'YYYY'),
                                                'day') =
                                       'sun'
                                  THEN
                                      1
                                  ELSE
                                      0
                              END    AS nr_of_sundays
                       FROM date_range)
              SELECT TO_CHAR (mydate, 'YYYY')    AS year,

                     LISTAGG (
                         DISTINCT TO_CHAR (TRUNC (mydate, 'MONTH'), 'MONTH'),
                         ', ')                   AS MONTHS,
                     (nr_of_sundays + 1)         week_num,
                     LEAD (TRUNC(MIN(mydate),'IW'),1,TRUNC(MIN(mydate+7),'IW')) OVER (ORDER BY TRUNC(MIN(mydate),'IW')) AS MONDAY_DATE
                FROM weeknum_per_date
               WHERE TO_DATE (mydate, 'DD/MM/YY') >=
                     TO_DATE (SYSDATE - 7, 'DD/MM/YY')
            GROUP BY (nr_of_sundays + 1), TO_CHAR (mydate, 'YYYY')
            ORDER BY TO_CHAR (mydate, 'YYYY'),
                     TO_CHAR (nr_of_sundays + 1, 'fm00');

内容的提问来源于stack exchange,提问作者Emre Kayacık

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:24:57