Oracle выбирает месяцы вне таймфрейма - PullRequest
2 голосов
/ 27 февраля 2012

Получив таблицу t (id, from, to), где from и to - две даты интервала за несколько лет, я хотел бы сделать выборку для этой таблицы, которая для каждого таймфрейма в таблице t будет возвращаться список месяца / года в течение этого периода. НАПРИМЕР. содержимое таблицы t будет:

id     from               to
1      01.10.2011         28.02.2012
2      01.06.2008         30.09.2008

оператор выбора должен возвращать идентификатор, номер месяца в году, год:

1  10   2011
1  11   2011
1  12   2011
1  01   2012
1  02   2012
2  06   2008
2  07   2008
2  08   2008
2  09   2008   

Есть идеи, как я могу это сделать? Спасибо!

Ответы [ 2 ]

3 голосов
/ 27 февраля 2012

Вы должны использовать генератор строк :

 select 
    id,  
    ADD_MONTHS( "from", N.N ), 
    to_char( dt_column, 'mm' ) , 
    to_char( dt_column, 'yyyy' ) 
 from
  yourTable t 
 inner join
  (SELECT ROWNUM n
   FROM   ( SELECT 1 just_a_column
         FROM   dual
         CONNECT BY LEVEL <= 365
  ) N
    on ADD_MONTHS( "from", N.N ) <= last_day( t."to" )
1 голос
/ 27 февраля 2012

Простейшей идеей может быть создание небольшой таблицы, в которой есть строка с одной датой в месяц, охватывающая ваш возможный период времени.

Вы можете присоединиться к ней, когда даты находятся между вашими двумя необходимыми.

Другим вариантом было бы посмотреть на "соединить по" и рекурсивные запросы.Требуется некоторое обучение, хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...