0

我正在编写一份报告,需要每周提取数据,并在给定的时间段内每月拆分一次。

这是我的要求

1) 我需要从 (1.1.2013) 到 (6.30.2013) 的给定期间的每周数据,每月分手(1 月、2 月、3 月等......)(我有一个解决方案...... )

我期待低于输出。

Week1 01.01.2013  01.07.2013
Week2 01.08.2013  01.14.2013
Week3 01.15.2013  01.21.2013
Week4 01.22.2013  01.28.2013
Week5 01.29.2013  01.31.2013 (Week 5 is Partial week)
Week6 02.01.2013  02.07.2013 (First week of Month 2)
.....

2) 这是我的关键要求,有时我会在月中得到开始日期,比如说 01.08.2013 和结束日期 06.30.2013。在这种情况下,每月休息时间将超出当月。类似(01.08.2013 到 02.07.2013、02.08.2013 到 03.07.2013 等)
所以我的输出应该是

Week1 01.08.2013  01.14.2013
Week2 01.15.2013  01.21.2013
Week3 01.22.2013  01.28.2013
Week4 01.29.2013  02.04.2013 (Week 4 goes to Feb Month)
Week5 02.05.2013  02.07.2013 (Month ends on Week 5 )
Week6 02.08.2013  02.14.2013 (1st week of Month 2)
Week7 02.15.2013  02.21.2013
.....

我在 Oracle 中寻找 SQL 查询。

非常感谢任何输入。

到目前为止,我得到了以下代码(我从 Stackoverflowfourm 得到这个)

select to_char(gen.d,'YYYY "cW"IW')
         , min(gen.d)
         , max(gen.d)
      from (
             select to_date('01.01.2013','DD.MM.YYYY') + level -1 d
               from dual
            connect by level <= 180 -- Instead of End date, I am passing no of days.
           ) gen
     group by
           to_char(gen.d,'YYYY "cW"IW')
         , to_char(gen.d,'YYYY MM IW')
4

1 回答 1

-1

你可以试试这个。我使用该YYYYMMWW格式来识别星期。

Select to_char(st_dt, 'YYYYMM') || '0' || ROW_NUMBER() OVER(PARTITION BY mon ORDER BY st_dt) week_key,
   to_char(st_dt, 'MONTH'),   
   to_char(st_dt, 'YYYY'),            
   st_dt,
   end_dt,
   ''
from (Select mon, week_num, min(t.dt) st_dt, max(t.dt) end_dt
      from (Select dt,
                   to_char(dt, 'MM') mon,
                   '0' || to_char(dt, 'W') my_week,
                   to_char(dt, 'WW') Week_num
              from (SELECT TRUNC(to_date('01-JAN-2020', 'DD-MON-YYYY') -
                                 ROWNUM) dt
                      FROM DUAL
                    CONNECT BY ROWNUM < 366)) t
     group by mon, week_num) m
order by st_dt;
于 2018-10-19T02:44:57.347 回答