|
|
|
Задача на аллокацию кредитов по залогам с помощью аналитических функций
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Прошу помощи в написании запроса с помощью аналитических функций (без рекурсии). Как сделать решение с помошью рекурсии, представляю, поэтому интереса в таком решении нет. Задача представляет собой аллокацию кредитов по залогам. Есть кредиты, которые обеспечиваются залогами. Один залог может обеспечивать несколько кредитов, так и кредит может обеспечиваться несколькими залогами. Задача состоит в том, чтобы разложить кредиты по залогам в определенном порядке, заданной в таблице allocation полем priority. Задача очень похожа на Укомплектование заказов товарами с полок склада , но с некоторым отличием, есть порядок распределения. Из-за этой особенности алгоритм раскладывания, предложенный в той теме, не работает. Данные: Код: 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. Вот, что необходимо получить: id_pledgepledge_valueid_loanloan_valuepriorityallocatednot_allocated1100150150011002802503011003603060217049049002170360560021702806200370590770203702808010 Возможно ли вообще решить эту задачу обычным запросом без рекурсии и без процедурного языка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 19:22 |
|
||
|
Задача на аллокацию кредитов по залогам с помощью аналитических функций
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, в данных ошибка синтаксическая. Исправил. Данные: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 19:25 |
|
||
|
Задача на аллокацию кредитов по залогам с помощью аналитических функций
|
|||
|---|---|---|---|
|
#18+
hardwinterКак сделать решение с помошью рекурсии, представляю, поэтому интереса в таком решении нет.Не стесняйся, демонстрируй. hardwinterадача состоит в том, чтобы разложить кредиты по залогам в определенном порядке, заданной в таблице allocation полем priority.Так они уже разложены. Пусть тот шибко умный манагер, предложивший такое распределение, сразу укажет и суммы в качестве доказательства его сходимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2018, 07:41 |
|
||
|
Задача на аллокацию кредитов по залогам с помощью аналитических функций
|
|||
|---|---|---|---|
|
#18+
hardwinter, какая версия oracle? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2018, 17:21 |
|
||
|
Задача на аллокацию кредитов по залогам с помощью аналитических функций
|
|||
|---|---|---|---|
|
#18+
hardwinter, и непонятно, как в строке с priority 6 и 8 получились такие значения столбца not_allocated. Или там опечатка и должны были быть значения 60 и 80 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2018, 17:48 |
|
||
|
Задача на аллокацию кредитов по залогам с помощью аналитических функций
|
|||
|---|---|---|---|
|
#18+
j2khardwinter, и непонятно, как в строке с priority 6 и 8 получились такие значения столбца not_allocated. Или там опечатка и должны были быть значения 60 и 80 ? Да, Вы правы, есть ошибка. Исправил. Вот, что необходимо получить: id_pledgepledge_valueid_loanloan_valuepriorityallocatednot_allocated11001501500110028025030110036030602170490490021703605600217028062010370590770203702808010 Кредиту под номером 2 так и не достанется 10 условных единиц залога. Версия Oracle 12c. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2018, 21:00 |
|
||
|
Задача на аллокацию кредитов по залогам с помощью аналитических функций
|
|||
|---|---|---|---|
|
#18+
hardwinterВозможно ли вообще решить эту задачу обычным запросом без рекурсии и без процедурного языка?Решается моделью, но не особо эффективно. Если записей тысячи, а не миллионы, то не критично. Я практически идентичную задачу описывал в книге под названием Baskets (см. содержание). Аналитикой нерешаемо ибо невозможно учесть какая часть уже была аллоцирована. Нижеследующее может создавать впечатление правильного результата, но это только магия данных. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Здесь полагается что loans are fully reusable across pledges which is no true. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2018, 02:54 |
|
||
|
Задача на аллокацию кредитов по залогам с помощью аналитических функций
|
|||
|---|---|---|---|
|
#18+
Код: 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. dbms_photoshop, а на каких данных магия перестанет действовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2018, 10:50 |
|
||
|
Задача на аллокацию кредитов по залогам с помощью аналитических функций
|
|||
|---|---|---|---|
|
#18+
j2kdbms_photoshop, а на каких данных магия перестанет действовать?Я же пояснил ключевой момент дважды и разными словами. dbms_photoshopАналитикой нерешаемо ибо невозможно учесть какая часть уже была аллоцирована.dbms_photoshopЗдесь полагается что loans are fully reusable across pledges which is not true. Соотвественно если добавить, например, такое правило Код: plsql 1. то 50 будет выделено для второго поручительства хотя оно уже было выделено для первого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2018, 13:52 |
|
||
|
Задача на аллокацию кредитов по залогам с помощью аналитических функций
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, спасибо за развернутый ответ. Вы подтвердили мои предположения, что эта задача в общем случае не решается аналитическими функциями. Посмотрел Вашу книгу, задача Baskets и правда похожа с этой. Также много интересного нашел для себя: хорошо разобранные задачи, описание различных методов решения задач на Oracle. Я привел, конечно, не лучший пример исходных данных, но в общем случае не все так тривиально. Ниже при решении задачи использовал более сложный пример исходных данных. Решил эту задачу с помощью Model, чтобы изучить новый для себя инструмент Oracle. Код: 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. Итоговый результат: PRIORITYID_PLEDGEID_LOANPLEDGE_VALUELOAN_VALUE ALLOCATEDNOT_ALLOCATED111704040021270503020313708008042116040005221605020062416090900725160605010823160800809357060100103370806020 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2018, 20:20 |
|
||
|
Задача на аллокацию кредитов по залогам с помощью аналитических функций
|
|||
|---|---|---|---|
|
#18+
hardwinter, Спасибо за лестный отзыв. :)) Для полноты картины, not_allocated можно посчитать аналитикой, если allocated уже посчитано моделью Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2018, 01:37 |
|
||
|
|

start [/forum/topic.php?fid=52&tid=1883430]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 343ms |

| 0 / 0 |
