2015-10-22 3 views
0

Мне нужно преобразовать таблицу в другую. У меня есть следующие строки:Oracle датирует диапазон от несовместных дат

quantity fdate 
3   2006.10.11. 
6   2006.10.18. 
6   2006.10.19. 
6   2006.10.23. 
4   2006.10.25. 
6   2006.10.28. 
6   2006.10.30. 

Проблема в том, что даты не последовательны, и количество может быть повторено в последнее время. Желаемый результат заключается в следующем:

quantity begin_date end_date 
3   2006.10.11. 2006.10.11. 
6   2006.10.18. 2006.10.23. 
4   2006.10.25. 2006.10.25. 
6   2006.10.28. 2006.10.30. 

Это кажется просто, но группа по, мин, не более, ранг не может помочь мне, и я не могу найти трюк. Как я могу это достичь? Заранее спасибо.

ответ

0

Надеется, что это помогает:

SQL> 
SQL> WITH table_(quantity , fdate) AS 
    2 (select 3, to_date('2006.10.11.', 'yyyy.mm.dd.') from dual union all 
    3 select 6, to_date('2006.10.18.', 'yyyy.mm.dd.') from dual union all 
    4 select 6, to_date('2006.10.19.', 'yyyy.mm.dd.') from dual union all 
    5 select 6, to_date('2006.10.23.', 'yyyy.mm.dd.') from dual union all 
    6 select 4, to_date('2006.10.25.', 'yyyy.mm.dd.') from dual union all 
    7 select 6, to_date('2006.10.28.', 'yyyy.mm.dd.') from dual union all 
    8 select 6, to_date('2006.10.30.', 'yyyy.mm.dd.') from dual), 
    9 ------- 
10 -- End of data preparation 
11 ------- 
12 table2 AS (select quantity , 
13      fdate, 
14      row_number() OVER (ORDER BY fdate) - 
15      row_number() OVER (PARTITION BY quantity ORDER BY fdate) AS grp 
16    FROM table_) 
17 SELECT quantity, to_char(MIN(fdate), 'yyyy.mm.dd.') START_DT, to_char(MAX(fdate), 'yyyy.mm.dd.') END_DT 
18 FROM table2 
19 GROUP BY quantity, grp 
20 ORDER BY 2 
21/

    QUANTITY START_DT END_DT 
---------- ----------- ----------- 
     3 2006.10.11. 2006.10.11. 
     6 2006.10.18. 2006.10.23. 
     4 2006.10.25. 2006.10.25. 
     6 2006.10.28. 2006.10.30. 

SQL> 
+0

Да, это помогает, спасибо! :) Кажется, я почти сделал это, но я попробовал с rank() вместо row_number(). – KatieAmber

Смежные вопросы