Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Нужна помощь, подскажите / 13 сообщений из 13, страница 1 из 1
12.01.2018, 10:45
    #39583099
a_s_v
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь, подскажите
Есть 3 набора данных (на самом деле их значительно больше) нужно для набора RE1 сформировать запись входящие из других наборов по диапазону
WITH
RE1 as (
select '10' as id,to_date('05.05.2017', 'dd.mm.yyyy') as DP, '1' as TOO, '0' as FRO, '174' as V, '100' as N FROM dual union all
select '11' as id, to_date('06.07.2017', 'dd.mm.yyyy') as DP, '1' as TOO, '0' as FRO, '174' as V, '100' as N FROM dual union all
select '12' as id, to_date('08.09.2017', 'dd.mm.yyyy') as DP, '1' as TOO, '0' as FRO, '174' as V, '100' as N FROM dual union all
select '13' as id, to_date('10.10.2017', 'dd.mm.yyyy') as DP, '1' as TOO, '0' as FRO, '174' as V, '100' as N FROM dual
),
RE2 as (
select '14' as id, to_date('07.05.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '1' as FRO, '174' as V, '100' as N FROM dual union all
select '15' as id,to_date('09.07.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '1' as FRO, '174' as V, '100' as N FROM dual union all
select '16' as id,to_date('08.09.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '1' as FRO, '174' as V, '100' as N FROM dual
),
RE3 as (
select '17' as id,to_date('04.06.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '0' as FRO, '173' as V, '100' as N FROM dual union all
select '18' as id,to_date('07.08.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '0' as FRO, '173' as V, '100' as N FROM dual
)

В результате должно получится как-то так:

Код: plaintext
1.
2.
3.
4.
5.
RE1.DP(диапазон)	 из RE2.DP	  из RE3.DP
05.05.2017-06.07.2017	|07.05.2017	|04.06.2017
06.07.2017-09.09.2017	|09.07.207      |07.08.2017
08.09.2017-10.10.2017	|08.09.2017	|NULL
> 10.10.2017	        |NULL	        |NULL
...
Рейтинг: 0 / 0
12.01.2018, 11:01
    #39583135
Нужна помощь, подскажите
a_s_v,

и какие сложности? LEAD/LAG по первому набору, а далее LEFT JOIN по between на второй и третий набор
...
Рейтинг: 0 / 0
12.01.2018, 11:16
    #39583150
a_s_v
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь, подскажите
Можно подробней ? Сложности есть
...
Рейтинг: 0 / 0
12.01.2018, 11:29
    #39583158
a_s_v
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь, подскажите
Воможно не очень правильно сформулировал там связка наборов по RE1.V = RE2=V.RE3.V
и длжно получится

Код: plaintext
1.
2.
3.
4.
5.
V     RE1.DP(диапазон)	 из RE2.DP	  из RE3.DP
100 |05.05.2017-06.07.2017	|07.05.2017	|04.06.2017
100 |06.07.2017-09.09.2017	|09.07.207      |07.08.2017
100 |08.09.2017-10.10.2017	|08.09.2017	|NULL
100 |> 10.10.2017	        |NULL	        |NULL
...
Рейтинг: 0 / 0
12.01.2018, 11:30
    #39583161
Нужна помощь, подскажите
Добрый Э - Эх по betweenнедальновидно.
...
Рейтинг: 0 / 0
12.01.2018, 11:32
    #39583166
a_s_v
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь, подскажите
Ошибка по полю re1.N =re2.N=re3.N
Код: plaintext
1.
2.
3.
4.
5.
N    RE1.DP(диапазон)	 из RE2.DP	  из RE3.DP
100 |05.05.2017-06.07.2017	|07.05.2017	|04.06.2017
100 |06.07.2017-09.09.2017	|09.07.207      |07.08.2017
100 |08.09.2017-10.10.2017	|08.09.2017	|NULL
100 |> 10.10.2017	        |NULL	        |NULL
...
Рейтинг: 0 / 0
12.01.2018, 11:33
    #39583169
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь, подскажите
a_s_v,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
WITH 
RE1 as (
select '10' as id,to_date('05.05.2017', 'dd.mm.yyyy') as DP, '1' as TOO, '0' as FRO, '174' as V, '100' as N FROM dual union all
select '11' as id, to_date('06.07.2017', 'dd.mm.yyyy') as DP, '1' as TOO, '0' as FRO, '174' as V, '100' as N FROM dual union all
select '12' as id, to_date('08.09.2017', 'dd.mm.yyyy') as DP, '1' as TOO, '0' as FRO, '174' as V, '100' as N FROM dual union all
select '13' as id, to_date('10.10.2017', 'dd.mm.yyyy') as DP, '1' as TOO, '0' as FRO, '174' as V, '100' as N FROM dual 
),
RE2 as (
select '14' as id, to_date('07.05.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '1' as FRO, '174' as V, '100' as N FROM dual union all
select '15' as id,to_date('09.07.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '1' as FRO, '174' as V, '100' as N FROM dual union all
select '16' as id,to_date('08.09.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '1' as FRO, '174' as V, '100' as N FROM dual 
),
RE3 as (
select '17' as id,to_date('04.06.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '0' as FRO, '173' as V, '100' as N FROM dual union all
select '18' as id,to_date('07.08.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '0' as FRO, '173' as V, '100' as N FROM dual 
),
R as (
select id,dp,lead(dp,1,date '2999-12-31') over (order by dp) de from re1
)
select r.id,r.dp,r.de,re2.dp dp2,re3.dp dp3 
from 
  r left outer join re2 on (re2.dp >=r.dp and re2.dp<r.de)
    left outer join re3 on (re3.dp >=r.dp and re3.dp<r.de)
order by r.dp
/

SQL> set null null
SQL> /

ID DP       DE       DP2      DP3
-- -------- -------- -------- --------
10 05.05.17 06.07.17 07.05.17 04.06.17
11 06.07.17 08.09.17 09.07.17 07.08.17
12 08.09.17 10.10.17 08.09.17 null
13 10.10.17 31.12.99 null     null



....
stax
...
Рейтинг: 0 / 0
12.01.2018, 11:34
    #39583172
Нужна помощь, подскажите
пограничникДобрый Э - Эх по betweenнедальновидно.автор даже не осознал первой части посыла (про LEAD/LAG). думаешь, он бы понял продолжение про лефт джойн на неэквиусловии по "больше либо равно" и "меньше"?
...
Рейтинг: 0 / 0
12.01.2018, 11:41
    #39583178
a_s_v
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь, подскажите
Stax, Спасибо Огромное
...
Рейтинг: 0 / 0
12.01.2018, 11:43
    #39583183
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь, подскажите
Добрый Э - Эхпограничникпропущено...
недальновидно.автор даже не осознал первой части посыла (про LEAD/LAG). думаешь, он бы понял продолжение про лефт джойн на неэквиусловии по "больше либо равно" и "меньше"?

сложность скорее в другом
что делать еслі в "диапазон" попадает больше 1 строки из ре2, ре3?

....
stax
...
Рейтинг: 0 / 0
12.01.2018, 11:51
    #39583196
a_s_v
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь, подскажите
Да это именно та сложность из re2 и re3 может быть несколько записей попадающих в один диапазон
...
Рейтинг: 0 / 0
12.01.2018, 11:58
    #39583204
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь, подскажите
a_s_vДа это именно та сложность из re2 и re3 может быть несколько записей попадающих в один диапазон
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
WITH 
RE1 as (
select '10' as id,to_date('05.05.2017', 'dd.mm.yyyy') as DP, '1' as TOO, '0' as FRO, '174' as V, '100' as N FROM dual union all
select '11' as id, to_date('06.07.2017', 'dd.mm.yyyy') as DP, '1' as TOO, '0' as FRO, '174' as V, '100' as N FROM dual union all
select '12' as id, to_date('08.09.2017', 'dd.mm.yyyy') as DP, '1' as TOO, '0' as FRO, '174' as V, '100' as N FROM dual union all
select '13' as id, to_date('10.10.2017', 'dd.mm.yyyy') as DP, '1' as TOO, '0' as FRO, '174' as V, '100' as N FROM dual 
),
RE2 as (
select '14' as id, to_date('07.05.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '1' as FRO, '174' as V, '100' as N FROM dual union all
select '17' as id, to_date('08.05.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '1' as FRO, '174' as V, '100' as N FROM dual union all
select '15' as id,to_date('09.07.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '1' as FRO, '174' as V, '100' as N FROM dual union all
select '16' as id,to_date('08.09.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '1' as FRO, '174' as V, '100' as N FROM dual 
),
RE3 as (
select '16' as id,to_date('04.06.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '0' as FRO, '173' as V, '100' as N FROM dual union all
select '17' as id,to_date('05.06.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '0' as FRO, '173' as V, '100' as N FROM dual union all
select '18' as id,to_date('07.08.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '0' as FRO, '173' as V, '100' as N FROM dual union all
select '19' as id,to_date('08.08.2017', 'dd.mm.yyyy') as DP, '0' as TOO, '0' as FRO, '173' as V, '100' as N FROM dual 
),
R as (
select id,dp,lead(dp,1,date '2999-12-31') over (order by dp) de from re1
),
r1 as (
select r.id,r.dp,r.de,re2.dp dp2
,row_number() over (partition by r.id order by re2.dp) rn1
from 
  r left outer join re2 on (re2.dp >=r.dp and re2.dp<r.de)
),
r2 as (
select r.id,r.dp,r.de,re3.dp dp3 
,row_number() over (partition by r.id order by re3.dp) rn2
from 
  r left outer join re3 on (re3.dp >=r.dp and re3.dp<r.de)
)
select nvl(r1.id,r2.id) id,nvl(r1.dp,r2.dp) dp,nvl(r1.de,r2.de) de
,rn1,dp2,rn2,dp3 
from r1 full outer join r2 on (r1.id=r2.id and r1.rn1=r2.rn2)
order by dp
/
SQL> /

ID DP       DE               RN1 DP2              RN2 DP3
-- -------- -------- ----------- -------- ----------- --------
10 05.05.17 06.07.17           1 07.05.17           1 04.06.17
10 05.05.17 06.07.17           2 08.05.17           2 05.06.17
11 06.07.17 08.09.17           1 09.07.17           1 07.08.17
11 06.07.17 08.09.17 null        null               2 08.08.17
12 08.09.17 10.10.17           1 08.09.17           1 null
13 10.10.17 31.12.99           1 null               1 null



.....
stax
...
Рейтинг: 0 / 0
12.01.2018, 12:16
    #39583218
a_s_v
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь, подскажите
Stax, Круто !
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Нужна помощь, подскажите / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]