Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помощь в построении запроса / 12 сообщений из 12, страница 1 из 1
26.04.2018, 18:14
    #39636944
NTDim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в построении запроса
Добрый день!

Есть таблица:
Номер по порядку, дата создания записи, статус, число

Необходим запрос, который выберет все записи между двумя "статусами" и посчитает сумму по полю "число".
...
Рейтинг: 0 / 0
26.04.2018, 20:39
    #39637018
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в построении запроса
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with t as (
select 1 r, to_date('01.01.2018', 'dd.mm.yyyy') d, 0 s, 100 n from dual union all
select 2 r, to_date('01.01.2018', 'dd.mm.yyyy') d, 0 s, 150 n from dual union all
select 3 r, to_date('02.01.2018', 'dd.mm.yyyy') d, 1 s, 200 n from dual union all
select 4 r, to_date('02.01.2018', 'dd.mm.yyyy') d, 1 s, 250 n from dual union all
select 5 r, to_date('03.01.2018', 'dd.mm.yyyy') d, 1 s, 300 n from dual union all
select 8 r, to_date('01.02.2018', 'dd.mm.yyyy') d, 2 s, 400 n from dual union all
select 11 r, to_date('01.03.2018', 'dd.mm.yyyy') d, 3 s, 500 n from dual union all
select 13 r, to_date('02.05.2018', 'dd.mm.yyyy') d, 3 s, 1 n from dual
)
select t.*, sum(n) over() sum_n
from t
where s > 0 and s < 3
...
Рейтинг: 0 / 0
28.04.2018, 19:48
    #39638197
NTDim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в построении запроса
dmdmdm,
Спасибо!
Только один нюанс, статусы это разные числа не идущие последовательно, "между" подразумевалось по времени возникновения записи со статусом ..
...
Рейтинг: 0 / 0
28.04.2018, 20:05
    #39638203
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в построении запроса
NTDimТолько один нюансне один.
...
Рейтинг: 0 / 0
28.04.2018, 20:17
    #39638207
NTDim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в построении запроса
-2-,
Спасибо за уточнение, сильно помогло в решении вопроса.
...
Рейтинг: 0 / 0
02.05.2018, 11:00
    #39638913
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в построении запроса
NTDim-2-,
Спасибо за уточнение, сильно помогло в решении вопроса.
решили?

,,,,,
stax
...
Рейтинг: 0 / 0
07.05.2018, 10:46
    #39641260
NTDim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в построении запроса
Stax,

пока нет к сожалению (
...
Рейтинг: 0 / 0
07.05.2018, 16:13
    #39641538
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в построении запроса
NTDimStax,

пока нет к сожалению (
Код: 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.
Connected to Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 

SQL> 
with t as (
select 1 r, to_date('01.01.2018', 'dd.mm.yyyy') d, 0 s, 100 n from dual union all
select 2 r, to_date('01.01.2018', 'dd.mm.yyyy') d, 0 s, 150 n from dual union all
select 3 r, to_date('02.01.2018', 'dd.mm.yyyy') d, 1 s, 200 n from dual union all
select 4 r, to_date('02.01.2018', 'dd.mm.yyyy') d, 1 s, 250 n from dual union all
select 5 r, to_date('03.01.2018', 'dd.mm.yyyy') d, 7 s, 300 n from dual union all
select 8 r, to_date('01.02.2018', 'dd.mm.yyyy') d, 2 s, 400 n from dual union all
select 9 r, to_date('01.02.2018', 'dd.mm.yyyy') d, 3 s, 400 n from dual union all
select 10 r, to_date('01.02.2018', 'dd.mm.yyyy') d, 31 s, 400 n from dual union all
select 11 r, to_date('01.02.2018', 'dd.mm.yyyy') d, 1 s, 400 n from dual union all
select 12 r, to_date('01.03.2018', 'dd.mm.yyyy') d, 3 s, 500 n from dual union all
select 13 r, to_date('02.05.2018', 'dd.mm.yyyy') d, 3 s, 1 n from dual
)
select r_range, sum_n, d_from, d_to
  from t MATCH_RECOGNIZE (
 order by r
measures first(strt.r) ||'-'|| last(stp.r) as r_range
       , min(strt.d) as d_from
       , max(stp.d) as d_to
       , nvl(sum(s_member.n),0)+sum(strt.n) as sum_n
one row per match
after match skip past last row
pattern ( strt s_member* stp )
define strt as s = 1
     , stp as s = 3
     , s_member as s <> 3
) MR;
R_RANGE      SUM_N D_FROM      D_TO
------- ---------- ----------- -----------
3-9           1150 02.01.2018  01.02.2018
11-12          400 01.02.2018  01.03.2018

SQL> 
...
Рейтинг: 0 / 0
08.05.2018, 15:23
    #39642066
NTDim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в построении запроса
andrey_anonymous,

Спасибо!
Один вопрос, сумма по диапазону 3-9 разве не = (200+250+300+400+400)=1550 ?
А в запросе по результату 1150, как получилась эта сумма, получается он не посчитал 9-ю строку ?

И подскажите пожалуйста, вот эта строка "after match skip past last row" что значит ?
...
Рейтинг: 0 / 0
08.05.2018, 15:28
    #39642068
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в построении запроса
NTDimandrey_anonymous,
Один вопрос, сумма по диапазону 3-9 разве не = (200+250+300+400+400)=1550 ?
А в запросе по результату 1150, как получилась эта сумма, получается он не посчитал 9-ю строку ?


Поскольку постановка задачи отсутствует, я нафантазировал некоторую свою, которая не включает в результат данные стоп-статуса.
Но Вы вольны модифицировать пример под свои нужды.

NTDimИ подскажите пожалуйста, вот эта строка "after match skip past last row" что значит ?
https://docs.oracle.com/database/121/DWHSG/pattern.htm#DWHSG8956
http://www.oracle.com/technetwork/database/bi-datawarehousing/mr-deep-dive-3769287.pdf
...
Рейтинг: 0 / 0
10.05.2018, 10:17
    #39642496
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в построении запроса
andrey_anonymous http://www.oracle.com/technetwork/database/bi-datawarehousing/mr-deep-dive-3769287.pdf

авторWHERE symbol EXISTS ('ACME', 'OSCORP')

ето типа symbol IN ('ACME', 'OSCORP')?

.....
stax
...
Рейтинг: 0 / 0
10.05.2018, 15:30
    #39642733
NTDim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в построении запроса
andrey_anonymous,

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


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