powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разница значений в строках по условию
4 сообщений из 4, страница 1 из 1
Разница значений в строках по условию
    #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
Разница значений в строках по условию
    #39532531
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ASVG,

вам надо просто GROUPING_sets и lag()
...
Рейтинг: 0 / 0
Разница значений в строках по условию
    #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
Разница значений в строках по условию
    #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
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разница значений в строках по условию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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