|
|
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
LGРезультат не верный :)А тестовые данные и ожидаемый результат? Или просто ткнуть носом в ошибку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 16:57 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
-2-, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:07 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
LG, Сорри, забыл Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:13 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
LG, substr не тоже самое, что subword. Смысл p1..p5 - деревянный unpivot. Там должны получиться айдишники соответствующей глубины. Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:28 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
-2-, А ... Ясно ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:39 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
chameleon82, Можно построить транзитивное замыкание на иерархии. Тогда агрегирующие (и некоторые другие) запросы сильно упростятся. Но есть недостаток - его нужно поддерживать. Если иерархия меняется нечасто, это обычно не проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 21:01 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
wildwindЕсли иерархия меняется нечасто и при этом иерархия не слишком глубока, то еще проще заменить иерархию классификатором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 21:31 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 22:10 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 22:36 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
Последнее очень близко к истине :) Потестировал на кошках, too old snapshot`ом пока не пахнет :) Осталось дописать запрос по реальным данным. Остался неясным вопрос, каким танственным образом выстраивается правильная иерархия, ведь во внешнем запросе нет ни слова об упорядочивании! пс: а вообще можно ли на иерархическом запросе написать собственную анналитическую функцию, которая бы учитывала иерархию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 18:11 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
-2-, можно ли выложить код функции std.subword? в интернете так и не нашел его ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 18:19 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
wildwindchameleon82, Можно построить транзитивное замыкание на иерархии. Тогда агрегирующие (и некоторые другие) запросы сильно упростятся. Но есть недостаток - его нужно поддерживать. Если иерархия меняется нечасто, это обычно не проблема. можно поподробнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 18:20 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
chameleon82можно поподробнее? Транзитивное замыкание бинарного отношения R на множестве X есть наименьшее транзитивное отношение на множестве X, включающее R Если попроще - то предлагается дополнить табличку id parent_id2 13 24 2 следующим образом: 1->2->3 => 1,3 1->2->3->4 => 1,4 2->3->4 => 2,4 id parent_id2 13 24 21 31 42 4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 18:39 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
chameleon82-2-, можно ли выложить код функции std.subword? в интернете так и не нашел его (Она слишком универсальная и будет излишне для данной задачи греть процессор. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 18:49 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous следующим образом: 1->2->3 => 1,3 1->2->3->4 => 1,4 2->3->4 => 2,4 + рефлексивность 1->1 2->2 3->3 4->4 И скорее не дополнить, а создать еще одну. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 19:32 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
wildwind 1->1 2->2 3->3 4->4 Это будет анекдот про слона, муху и вечный кайф :) Ну а если по нашенски - то ORA-01436: CONNECT BY loop in user data ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 19:45 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, Поэтому замыкание - отдельно. А иерархия - для иерархических запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 20:09 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
На основе решения by Vladimir Sitnikov, которое основывается на граничных суммах, можно предложить более общее и простое: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2010, 21:11 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2010, 09:49 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopИспользует для определения окна rows BETWEEN, а не range BETWEEN, но поскольку содержит коррелированный подзапрос - отрабатывает медленнее, зато быстрее многих других предложенных. ;)И гораздо медленнее элементарного при наличии индекса на parent_id (а куда ж без него? :) ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2010, 17:16 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
andreymxdbms_photoshop, моё таки круче :)) опробовано на сотнях отчетов в течение 5 летОно может и прекрасно работает, если у тебя в таблице с иерархией пару сотен строк. А теперь представь, что в иерархии полмиллиона строк и ты сначала получаешь свои all_relations, а потом соединяешь их с иерахией. Elicdbms_photoshopИспользует для определения окна rows BETWEEN, а не range BETWEEN, но поскольку содержит коррелированный подзапрос - отрабатывает медленнее, зато быстрее многих других предложенных. ;)И гораздо медленнее элементарного при наличии индекса на parent_id (а куда ж без него? :) ).Не если еще чуток пофантазировать можно обойтись без подзапроса: Код: plsql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2012, 20:57 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, предварительно покрутил, и, возможно, не всё ещё понял добавил одну строку в исходные данные: Код: 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. получил:IDPARENT_IDAMOUNTSUMMA11064102110054003220002000423000300062300130076005110001000интересует сумма 1300 для строки id=6 так и надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2012, 08:51 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopВроде должно работатьБамбуковый лес: Код: plsql 1. 2. 3. Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2012, 10:26 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
andreymxинтересует сумма 1300 для строки id=6 так и надо?Нет, это неверно. Ищу начало следующей ветки по окну с большим rn и тем же уровнем. А надо искать по окну с большим rn и тем же либо меньшим уровнем. Вот из-за выделенного возникают проблемы с определением окна. К сожалению, если в кляузе order by фигурируют два поля, то два RANGE указать нельзя, а было бы забавно. :) Надо подумать можно ли придумать такой expression и соответствующий range, чтоб искало правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2012, 13:02 |
|
||
|
Агрегация сумм в иерархических запросах
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, авторОно может и прекрасно работает, если у тебя в таблице с иерархией пару сотен строк. А теперь представь, что в иерархии полмиллиона строк и ты сначала получаешь свои all_relations, а потом соединяешь их с иерахией. предпочитала подготовить полуфабрикат --итоги по цех,участок,профессия,месяц, наименование итога, сумма во временную таблицу РАБ1, обычно текстовик для скорости, суммы округляла согласно требованию заказчика --с РАБ1 уже требуемый отчет с ---------перекрестный, с анализом количества столбиков(обычно до 17 при отчете за год мес-кв-год) ---------условно гладкий типа количество, сумма_без_ндс,ндс, всего с ндс по позициям номенклатуры --обычно формировала в формате НТМ для удобства просмотра броузером или печати вордом(хотя и екселем приходилось иногда открывать для удобства доводки или очень большим для ворда) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2012, 15:31 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=36735202&tid=1885841]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
170ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 247ms |
| total: | 546ms |

| 0 / 0 |
