Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 запросик с датами  [new]
Synchrophasotron
Member

Откуда:
Сообщений: 169
Доброго времени суток
Столкнулся с маленькой проблемкой. Имеется запрос который выдает из некоторой таблицы периды:

SELECT BEG_DATE
    ,  END_DATE
FROM   TABLE_DATE 

Пример результа:
1-янв-2010 8-мар-2010
16-мар-2010 25-апр-2010
18-май-2010 30-июн-2010

Как сделать так чтобы промежутки между периодами тоже были включены в результат запроса?

1-янв-2010 8-мар-2010
9-мар-2010 15-мар-2010
16-мар-2010 25-апр-2010
26-апр-2010 17-май-2010
18-май-2010 30-июн-2010
28 июл 10, 17:39    [9173269]     Ответить | Цитировать Сообщить модератору
 Re: запросик с датами  [new]
Evgeniy_SH
Member

Откуда:
Сообщений: 375
http://forums.devshed.com/oracle-development-96/select-all-dates-between-two-dates-92997.html
28 июл 10, 17:44    [9173293]     Ответить | Цитировать Сообщить модератору
 Re: запросик с датами  [new]
Synchrophasotron
Member

Откуда:
Сообщений: 169
Evgeniy_SH
http://forums.devshed.com/oracle-development-96/select-all-dates-between-two-dates-92997.html


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

For example, given the start date 12/2/2003 and the end date 12/5/2003 I want to return:
12/2/2003
12/3/2003
12/4/2003

12/5/2003

И в дальнейшем задача сводиться как сгенерировать все эти даты. У меня же задача стоит по иному :
__/__/____ 12/2/2003
13/2/2003 11/5/2003
12/5/2003 __/__/____
28 июл 10, 17:56    [9173384]     Ответить | Цитировать Сообщить модератору
 Re: запросик с датами  [new]
Evgeniy_SH
Member

Откуда:
Сообщений: 375
а такие значки пробовал? "<" ">"?
28 июл 10, 17:57    [9173389]     Ответить | Цитировать Сообщить модератору
 Re: запросик с датами  [new]
Proteus
Member

Откуда:
Сообщений: 1348
WITH s AS
 (SELECT DATE '2010-1-1' beg_date, DATE '2010-3-1' END_date FROM dual UNION ALL
  SELECT DATE '2010-3-16', DATE '2010-4-25' FROM dual UNION ALL
  SELECT DATE '2010-5-18', DATE '2010-6-30' FROM dual),
s2 AS
 (SELECT s.*
    FROM s
  UNION ALL
  SELECT s.end_date + 1, LEAD(s.beg_date - 1) OVER(ORDER BY beg_date) FROM s)
SELECT * FROM s2 WHERE end_date >= beg_date ORDER BY 1;
28 июл 10, 17:59    [9173401]     Ответить | Цитировать Сообщить модератору
 Re: запросик с датами  [new]
AmKad
Member

Откуда:
Сообщений: 5222
Synchrophasotron,

with s as
(select date '2010-01-01' dt_begin, date '2010-01-05' dt_end from dual union all
 select date '2010-01-10' dt_begin, date '2010-01-15' dt_end from dual union all
 select date '2010-01-20' dt_begin, date '2010-01-25' dt_end from dual union all
 select date '2010-02-01' dt_begin, date '2010-02-05' dt_end from dual union all
 select date '2010-02-10' dt_begin, date '2010-02-15' dt_end from dual --union all
)

select s.dt_begin, s.dt_end, 1 include
from s
union all
select s.dt_begin, s.dt_end, 0 include from
   (select s.dt_end + 1 dt_begin,  lead(s.dt_begin) over(order by dt_begin) - 1 dt_end
    from s
   ) s where s.dt_begin < s.dt_end
order by dt_begin
28 июл 10, 18:06    [9173441]     Ответить | Цитировать Сообщить модератору
 Re: запросик с датами  [new]
AmKad
Member

Откуда:
Сообщений: 5222
AmKad
Synchrophasotron,

where s.dt_begin <= s.dt_end
28 июл 10, 18:08    [9173449]     Ответить | Цитировать Сообщить модератору
 Re: запросик с датами  [new]
Synchrophasotron
Member

Откуда:
Сообщений: 169
Спасибо… Proteus, AmKad. Так и сделалаю.
Я думал поначалу обойтись без оконных функций…
28 июл 10, 18:20    [9173518]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить