Перенос 7 календарной даты с каждой текущей текущей даты в Oracle - PullRequest
0 голосов
/ 28 января 2020

Дано:

calendar_date Date_Key  RowN 
03-OCT-21     20211003  1
03-OCT-21     20211003  2
03-OCT-21     20211003  3
04-OCT-21     20211004  4
07-OCT-21     20211007  5
07-OCT-21     20211007  6
09-OCT-21     20211009  7
10-OCT-21     20211010  8
13-OCT-21     20211013  9
13-OCT-21     20211013  10
13-OCT-21     20211013  11
15-OCT-21     20211015  12
17-OCT-21     20211017  13

Требуется: дата 7 циклов с каждой текущей текущей датой

Это мой код, который не дает мне правильный результат

select z.calendar_date,z.date_key,ceil(z.rown/7) as Grp from
(select b.calendar_date,b.date_key ,rownum as RowN
from Samp.cal_date_dim a, Samp.cal_date_dim b
where b.date_key-a.date_key>0 and b.date_key-a.date_key<=6)z

Выбор кода Объясните: если он начинается с 03 октября, то с 03 октября по 09 октября -> группа 1. Если он начинается с 04 октября, то с 04 октября по 10 октября -> группа 2.

OutPut Требуемый или желаемый результат

calendar_date  Grp  
03-OCT-21      1    
03-OCT-21      1    
03-OCT-21      1    
04-OCT-21      1    
07-OCT-21      1  
07-OCT-21      1  
09-OCT-21      1

04-OCT-21      2    
07-OCT-21      2  
07-OCT-21      2  
09-OCT-21      2
10-OCT-21      2

07-OCT-21      3
07-OCT-21      3
09-OCT-21      3
10-OCT-21      3
13-OCT-21      3
13-OCT-21      3
13-OCT-21      3

1 Ответ

0 голосов
/ 28 января 2020

Вы, кажется, просите самостоятельного присоединения вместе с dense_rank():

select dd.*, cd.seqnum as grp
from (select calendar_date, Date_Key,
             dense_rank() over (order by calendar_date) as seqnum
      from Samp.cal_date_dim
      group by calendar_date, Date_Key
     ) cd join
     Samp.cal_date_dim dd
     on dd.calendar_date >= cd.calendar_date and
        dd.calendar_date < cd.calendar_date + interval '7' day;
...