|
Вторничная задача: Зри в корень.
|
|||
---|---|---|---|
#18+
Возник академический интерес. Задача: при построении дерева для строк с пустым значением подставить ближайшее непустое значение родителя. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Наиболее очевидный подход - отрезать последнее значение в sys_connect_by_path или пройтись деревяшкой вверх. Код: 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.
Можно извернуться и получить скаляром через вложенные агрегаты. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Код: 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.
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Что интересует - можно ли придумать хитрое окно для аналитики или адресацию для модели без sys_connect_by_path. PS. rec with интереса не представляет в виду полной тривиальности. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 00:36 |
|
Вторничная задача: Зри в корень.
|
|||
---|---|---|---|
#18+
Кобанчег Наиболее очевидный подход - отрезать последнее значение в sys_connect_by_path или пройтись деревяшкой вверх. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 07:24 |
|
Вторничная задача: Зри в корень.
|
|||
---|---|---|---|
#18+
Кобанчег Наиболее очевидный подход Плохо то, что ты его не вспомнил. Или не знал? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 07:38 |
|
Вторничная задача: Зри в корень.
|
|||
---|---|---|---|
#18+
-2- Кобанчег Наиболее очевидный подход - отрезать последнее значение в sys_connect_by_path или пройтись деревяшкой вверх. Продемонстрированный скаляр может определить всех родителей поскольку есть (1) уровень и (2) порядок после постоения дерева. На всякий случай стоит уточнить для остальных, особой практической пользы он не представляет и был приведен просто как один из изысков в процессе поиска трюка. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 13:06 |
|
Вторничная задача: Зри в корень.
|
|||
---|---|---|---|
#18+
-2-Расскаляренный скалярный подзапрос уже решение.В том случае если известно что узлы дерева а что нет. Кроме того, смотреть вверх явно затратнее чем просто идти вниз. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 13:49 |
|
Вторничная задача: Зри в корень.
|
|||
---|---|---|---|
#18+
Кобанчег смотреть вверх явно затратнее чем просто идти вниз. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 13:58 |
|
Вторничная задача: Зри в корень.
|
|||
---|---|---|---|
#18+
Если это не очевидно, то предпочтительные решения либо дервяшка + sys_connect_by_path либо rec with в зависимости от деталей/ограничений. Остальное приведено для полноты картины. Цель была найти возможность натянуть модель или аналитику на спуск вниз. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 14:06 |
|
Вторничная задача: Зри в корень.
|
|||
---|---|---|---|
#18+
Кобанчег Цель была найти возможность натянуть модель или аналитику на спуск вниз. Не получится задать окно - синтакс позволяет только RANGE BETWEEN CURRENT ROW AND N following. A N не получится квантифицировать. Вот если бы было RANGE LIKE ... SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 14:29 |
|
Вторничная задача: Зри в корень.
|
|||
---|---|---|---|
#18+
Или если бы было что-то типа WINDOW_START(expression). SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 14:33 |
|
Вторничная задача: Зри в корень.
|
|||
---|---|---|---|
#18+
SY Не получится задать окно - синтакс позволяет только RANGE BETWEEN CURRENT ROW AND N following. A N не получится квантифицировать. Я в решениях с pattern matching и scalar + nested aggreagates использовал одну и ту же идею. Для каждого узла делаем: для всех уровней от текущего до корня получаем первый по порядку убывания rn узел и среди полученных берем первый непустой. Еще моделью это можно продемонстировать так: Для каждого узла получаем вспомогательный столбец с порядком, потом смотрим последний ненулевой среди первых по порядку. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Можно и поизящнее сформулировать, но от итераций уйти не удаётся следовательно непрактично. SY Вот если бы было RANGE LIKE SY Или если бы было что-то типа WINDOW_START(expression). В конце концов аналитика явно более ограничена чем модель: - в аналитике мы можем указываеть rows/range только при сортировке по одному полю - в модели мы можем выдумывать хитрые условия для срезов для агрегатов по нескольким измерениям (условно agg() [range1, range2, ...]) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 19:22 |
|
Вторничная задача: Зри в корень.
|
|||
---|---|---|---|
#18+
Как конкретный пример, для строки выделенным красным, в окно (или срез) должна попасть она и все выделенные желтым. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
В pattern matching это делается тривиально - спустившись на уровень ниже мы рассматриваем только первый по порядку убывания узел на этом уровне. Еще была мысль предварительно посчитать некоторое выражение. Вот как здесь для конкретного родителя охватываем всех потомков 3873927 . Так же предполагалось охватить для конкретного узла всех предков. Но пока фантазия иссякла. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 19:31 |
|
Вторничная задача: Зри в корень.
|
|||
---|---|---|---|
#18+
SY Вот если бы было RANGE LIKE R020 Можем в каком-ниубдь Oracle 20 Release 2 появится. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2020, 20:25 |
|
|
start [/forum/topic.php?fid=52&msg=39904090&tid=1881537]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 18ms |
total: | 155ms |
0 / 0 |