Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разница значений в строках по условию / 4 сообщений из 4, страница 1 из 1
06.10.2017, 22:32
    #39532528
ASVG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница значений в строках по условию
Доброй ночи, уважаемые участники форума!

Помогите решить задачку, так как перебрал, кажется, почти все варианты, но решения так и не нашел. Имеется следующая структура данных. Итоговые строки (где V2, V3 = null) получены с помощью оконной аналитической функции. RW - столбец для сортировки значений, чтобы итоговые строки находились под группами, которые они подытоживают.

Задача в следующем:

Вывести в дополнительном столбце (только в строке итогов) разницу между текущим и предыдущим значением (по столбцу V5). Для второй строки итогов это будет 52.7 - 80.15, для первой либо null либо можно получить 0 (80.15 - 80.15). Не итоговые строки должны быть null.



"Живой" пример выложил здесь: http://www.sqlfiddle.com/#!4/197a0c/1/0

Буду благодарен как за реальную помощь в изменении запроса, так и за любые соображения по этому поводу.
...
Рейтинг: 0 / 0
06.10.2017, 22:48
    #39532531
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница значений в строках по условию
ASVG,

вам надо просто GROUPING_sets и lag()
...
Рейтинг: 0 / 0
09.10.2017, 11:31
    #39533289
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница значений в строках по условию
ASVG
Вывести в дополнительном столбце (только в строке итогов) разницу между текущим и предыдущим значением (по столбцу V5). Для второй строки итогов это будет 52.7 - 80.15, для первой либо null либо можно получить 0 (80.15 - 80.15). Не итоговые строки должны быть null.

А для 3-й какой результат планируется?
например по итогу:
Код: sql
1.
2.
V1       V4     V5
3   -- Итого  100
...
Рейтинг: 0 / 0
09.10.2017, 15:48
    #39533506
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница значений в строках по условию
ASVG,
Код: 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.
50.
51.
52.
53.
54.
SQL> select * from data_src order by 1,2,3,4;

 DATA_TYPE DATA_SUB_TYPE P_TXT  M_TXT        VOL       ASVI        L_M
---------- ------------- ------ ----- ---------- ---------- ----------
         1             0 p_1    m_1        12,05         10         12
         1             0 p_1    m_1        17,25         13          9
         1             0 p_1    m_2        17,25         13          9
         1             1 p_1    m_1        12,05         10         12
         1             1 p_2    m_1        10,25         13          9
         1             1 p_2    m_2         11,3         13          9
         2             0 p_1    m_1        12,15         10         12
         2             0 p_1    m_2         18,3         15          8
         2             1 p_1    m_2        22,25         20         11
         3             1 p_1    m_2        22,25         20         11

10 rows selected.

SQL> with t as (
  2  select
  3   data_type as v1,
  4   data_sub_type as v2,
  5   p_txt as v3,
  6   m_txt as v4,
  7   sum(vol) as v5,
  8   sum(asvi) as v6,
  9   avg(l_m) as v7,
 10   grouping(data_sub_type) gr
 11  from data_src
 12  group by grouping sets ((data_type, data_sub_type, p_txt, m_txt),(data_type))
 13  )
 14  select t.*
 15  ,decode(gr,1,lag(v5) over (partition by gr order by v1))-v5 v_sub
 16  from t
 17  order by 1,2,3,4
 18  /

        V1         V2 V3    V4            V5         V6         V7         GR      V_SUB
---------- ---------- ----- ----- ---------- ---------- ---------- ---------- ----------
         1          0 p_1   m_1         29,3         23       10,5          0
         1          0 p_1   m_2        17,25         13          9          0
         1          1 p_1   m_1        12,05         10         12          0
         1          1 p_2   m_1        10,25         13          9          0
         1          1 p_2   m_2         11,3         13          9          0
         1                             80,15         72         10          1
         2          0 p_1   m_1        12,15         10         12          0
         2          0 p_1   m_2         18,3         15          8          0
         2          1 p_1   m_2        22,25         20         11          0
         2                              52,7         45 10,3333333          1      27,45
         3          1 p_1   m_2        22,25         20         11          0
         3                             22,25         20         11          1      30,45

12 rows selected.

SQL>



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


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