powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помощь в построении запроса
12 сообщений из 12, страница 1 из 1
Помощь в построении запроса
    #39636944
NTDim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

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

Необходим запрос, который выберет все записи между двумя "статусами" и посчитает сумму по полю "число".
...
Рейтинг: 0 / 0
Помощь в построении запроса
    #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
Помощь в построении запроса
    #39638197
NTDim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm,
Спасибо!
Только один нюанс, статусы это разные числа не идущие последовательно, "между" подразумевалось по времени возникновения записи со статусом ..
...
Рейтинг: 0 / 0
Помощь в построении запроса
    #39638203
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NTDimТолько один нюансне один.
...
Рейтинг: 0 / 0
Помощь в построении запроса
    #39638207
NTDim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,
Спасибо за уточнение, сильно помогло в решении вопроса.
...
Рейтинг: 0 / 0
Помощь в построении запроса
    #39638913
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NTDim-2-,
Спасибо за уточнение, сильно помогло в решении вопроса.
решили?

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

пока нет к сожалению (
...
Рейтинг: 0 / 0
Помощь в построении запроса
    #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
Помощь в построении запроса
    #39642066
NTDim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

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

И подскажите пожалуйста, вот эта строка "after match skip past last row" что значит ?
...
Рейтинг: 0 / 0
Помощь в построении запроса
    #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
Помощь в построении запроса
    #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
Помощь в построении запроса
    #39642733
NTDim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

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


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