powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Нужна помощь, подскажите
13 сообщений из 13, страница 1 из 1
Нужна помощь, подскажите
    #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
Нужна помощь, подскажите
    #39583135
a_s_v,

и какие сложности? LEAD/LAG по первому набору, а далее LEFT JOIN по between на второй и третий набор
...
Рейтинг: 0 / 0
Нужна помощь, подскажите
    #39583150
a_s_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно подробней ? Сложности есть
...
Рейтинг: 0 / 0
Нужна помощь, подскажите
    #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
Нужна помощь, подскажите
    #39583161
Добрый Э - Эх по betweenнедальновидно.
...
Рейтинг: 0 / 0
Нужна помощь, подскажите
    #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
Нужна помощь, подскажите
    #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
Нужна помощь, подскажите
    #39583172
пограничникДобрый Э - Эх по betweenнедальновидно.автор даже не осознал первой части посыла (про LEAD/LAG). думаешь, он бы понял продолжение про лефт джойн на неэквиусловии по "больше либо равно" и "меньше"?
...
Рейтинг: 0 / 0
Нужна помощь, подскажите
    #39583178
a_s_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, Спасибо Огромное
...
Рейтинг: 0 / 0
Нужна помощь, подскажите
    #39583183
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эхпограничникпропущено...
недальновидно.автор даже не осознал первой части посыла (про LEAD/LAG). думаешь, он бы понял продолжение про лефт джойн на неэквиусловии по "больше либо равно" и "меньше"?

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

....
stax
...
Рейтинг: 0 / 0
Нужна помощь, подскажите
    #39583196
a_s_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да это именно та сложность из re2 и re3 может быть несколько записей попадающих в один диапазон
...
Рейтинг: 0 / 0
Нужна помощь, подскажите
    #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
Нужна помощь, подскажите
    #39583218
a_s_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, Круто !
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Нужна помощь, подскажите
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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