Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / интервалы и коэффициенты, подскажите / 3 сообщений из 3, страница 1 из 1
29.07.2016, 12:19:37
    #39282625
Jonhson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
интервалы и коэффициенты, подскажите
Код: 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
v_data as
( select 20  as beg, 300 as en, 'V' as k from dual
  union all
  select 400 as beg, 450 as en, 'V' as k from dual
  union all
  select 700 as beg, 720 as en, 'V' as k from dual
),
s_data as
( select 0 as beg, 2300 as en, 'S' as k  from dual
  ),
interleave as
( select beg_int, end_int
    from
    ( select point as beg_int, lead(point) over (order by point) as end_int
        from
        ( select beg as point from v_data
          union
          select en as point from v_data
          union
          select beg as point from s_data
          union
          select en as point from s_data
        )
    )
    where end_int is not null
)
select beg_int, end_int, 
   case 
        when not exists (select 1 from v_data
                            where beg_int >= beg and end_int <= en) then 'S'
        else 
            'V'
   end as k 
from interleave;



он работает отлично, но хотелось бы иметь возможность простановки коэффициентов

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with
v_data as
( select 20  as beg, 300 as en, 'VI' as k from dual
  union all
  select 400 as beg, 450 as en, 'IV' as k from dual
  union all
  select 700 as beg, 720 as en, 'V' as k from dual
),
s_data as
( select 0 as beg, 1300 as en, 'S0' as k  from dual  union all
  select 1300 as beg, 2300 as en, 'S1' as k  from dual
  )



соответственно в результате проставляется коэффициент либо из группы s_data, если соответствующего отрезка в v_data нет, либо k из v_data.

можете подсказать в какую сторону ковырять запрос, а то что-то совсем годных идей нет
...
Рейтинг: 0 / 0
29.07.2016, 13:42:08
    #39282734
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
интервалы и коэффициенты, подскажите
...
Рейтинг: 0 / 0
01.08.2016, 19:15:44
    #39284185
Jonhson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
интервалы и коэффициенты, подскажите
Код: 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.
with
v_data as
( select 20  as beg, 300 as en, 'V' as k from dual
  union all
  select 400 as beg, 450 as en, 'V' as k from dual
  union all
  select 700 as beg, 720 as en, 'V' as k from dual
),
s_data as
( select 0 as beg, 2300 as en, 'S' as k  from dual
  ),
interleave as
( select beg_int, end_int
    from
    ( select point as beg_int, lead(point) over (order by point) as end_int
        from
        ( select beg as point from v_data
          union
          select en as point from v_data
          union
          select beg as point from s_data
          union
          select en as point from s_data
        )
    )
    where end_int is not null
)
select beg_int, end_int, v.k as v_k
        , s.k as s_k
from interleave i
left join v_data v 
    on ( beg_int >= v.beg and end_int <= v.en)
left join s_data s 
    on ( beg_int >= s.beg and end_int <= s.en);



получилось как-то так
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / интервалы и коэффициенты, подскажите / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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