|
|
|
Вывод пересечений между датами
|
|||
|---|---|---|---|
|
#18+
Друзья, выручайте. create table t as select 'A' FIO,to_date('01.08.2018','dd.mm.yyyy') startdate, to_date('02.08.2018','dd.mm.yyyy') enddate from dual union all select 'B',to_date('03.08.2018','dd.mm.yyyy'), to_date('04.08.2018','dd.mm.yyyy') from dual union all select 'C',to_date('05.08.2018','dd.mm.yyyy'), to_date('12.08.2018','dd.mm.yyyy') from dual union all select 'D',to_date('12.08.2018','dd.mm.yyyy'), to_date('16.08.2018','dd.mm.yyyy') from dual union all select 'D',to_date('17.08.2018','dd.mm.yyyy'), to_date('22.08.2018','dd.mm.yyyy') from dual union all select 'D',to_date('18.08.2018','dd.mm.yyyy'), to_date('20.08.2018','dd.mm.yyyy') from dual union all select 'D',to_date('19.08.2018','dd.mm.yyyy'), to_date('22.08.2018','dd.mm.yyyy') from dual union all select 'D',to_date('17.08.2018','dd.mm.yyyy'), to_date('23.08.2018','dd.mm.yyyy') from dual ; create or replace function f return sys.odcivarchar2list as dt date := to_date('01.01.1901','dd.mm.yyyy'); result sys.odcivarchar2list := sys.odcivarchar2list(); begin for i in (select rowid, t.* from t) loop if i.startdate > dt then dt := i.enddate; result.extend; result(result.count) := rowidtochar(i.rowid); end if; end loop; return result; end; select * from t where rowid in (select chartorowid(column_value) from table(f)); Нужно, чтобы выводило все пересечения по датам с фио D. Т.е. запросы выдавал строки с ФИО т.к. каждая из дат попадает в уже имеющиеся диапазоны у данного фио. Пожалуйста, подскажите, что поправить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2018, 16:41 |
|
||
|
Вывод пересечений между датами
|
|||
|---|---|---|---|
|
#18+
Можно использовать данный запрос Код: plsql 1. 2. 3. 4. Конечно тут есть изъян, что если будут 2 одинаковых отрезка, для одного fio, то он их не выдаст, но это решается добавлением поля id и переделыванием запроса Код: plsql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2018, 17:26 |
|
||
|
Вывод пересечений между датами
|
|||
|---|---|---|---|
|
#18+
Ну же, кто помнит про секретный недокументированный оператор типа пересечения дат Или здесь не об этом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2018, 17:30 |
|
||
|
Вывод пересечений между датами
|
|||
|---|---|---|---|
|
#18+
Не знал что такое есть в оракле Код: plsql 1. но вопрос все же в нахождении пользователей у которых есть пересечение со своими интервалами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2018, 17:41 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39691958&tid=1883565]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
148ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 458ms |

| 0 / 0 |
