|
Набор суммы для каждого счета.
|
|||
---|---|---|---|
#18+
Задача стоим следующим образом: Есть список клиентов @ListClient idclient - его ID Summa - ту сумму которую необходимо списать. Есть список его счетов: @listaccbalance idclient - id клиента account - номер счета summaost - сумма остатка priority - приоритет списания (от 1 до бесконечности) На выходе нужно для каждого клиента "расписать" сумму для списания с каждого счета. Код: sql 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.
Т.е. прежде чем расписывать сумму нужно отсортировать список для каждого клиента по приоритету и затем размазывать сумму. На выходе нам нужно получить вот такую табличку: SummaSpis - сумма списания Comment - для понимания логики работы IDclientAccountSummaClientPrioritySummaSpisComment116001500Нужно списать 500 т.к. на счет 600 нам нужно только 50022310001300Нужно списать 1000 но на счету только 300 списываем 30022210002400Нужно списать 1000-300=700 но на счету только 400 списываем 40022310003300Нужно списать 1000-300-400=300 но на счету 1000 нам столько не надо списываем 300332001200Нужно 200 и на счету 200 значит списываем 2004450120Нужно 50 но на счету 20 значит списываем 205570010Нужно списать 700 но на счету 0 поэтому 0 Код: sql 1. 2.
Объемы примерно 10000 клиентов, у каждого по 1-3 счета. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2014, 16:46 |
|
Набор суммы для каждого счета.
|
|||
---|---|---|---|
#18+
Hamber, Шаг 1. Набираете курсор на списание Шаг 2. В курсоре обрабатываешь списания согласно начислениям по приоритету Шаг 3. В курсоре меняются остатки на счетах после списания Шаг 4. Закрываем курсор. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2014, 17:25 |
|
Набор суммы для каждого счета.
|
|||
---|---|---|---|
#18+
Edkonst2008Hamber, Шаг 1. Набираете курсор на списание Шаг 2. В курсоре обрабатываешь списания согласно начислениям по приоритету Шаг 3. В курсоре меняются остатки на счетах после списания Шаг 4. Закрываем курсор. В транзакцию не забудьте каждое списание обернуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2014, 17:32 |
|
Набор суммы для каждого счета.
|
|||
---|---|---|---|
#18+
имхо это перевернутая задача накопительного итога. В один запрос решается. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2014, 18:05 |
|
Набор суммы для каждого счета.
|
|||
---|---|---|---|
#18+
авторимхо это перевернутая задача накопительного итога. В один запрос решается. Разве? А перенос остатка? (т.е. на 1-м счете 20 рублей, а мы списываем 100, тогда 80 надо передать на второй счет и т.д. Плюс клиент еще и в плюсе может оказаться :-)) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2014, 20:32 |
|
Набор суммы для каждого счета.
|
|||
---|---|---|---|
#18+
londiniumавторимхо это перевернутая задача накопительного итога. В один запрос решается. Разве? А перенос остатка? (т.е. на 1-м счете 20 рублей, а мы списываем 100, тогда 80 надо передать на второй счет и т.д. Плюс клиент еще и в плюсе может оказаться :-)) На 2012 я бы еще извернулся в один проход запросом. Но на 2005 что-то идей нет. Только идти курсором и перебирать записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2014, 20:41 |
|
Набор суммы для каждого счета.
|
|||
---|---|---|---|
#18+
a_voroninlondiniumпропущено... Разве? А перенос остатка? (т.е. на 1-м счете 20 рублей, а мы списываем 100, тогда 80 надо передать на второй счет и т.д. Плюс клиент еще и в плюсе может оказаться :-)) На 2012 я бы еще извернулся в один проход запросом. Но на 2005 что-то идей нет. Только идти курсором и перебирать записи. да ладно, многие подобные "курсорные" вещи через рекурсивное cte делается, вот прямо в лоб Код: sql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2014, 20:57 |
|
|
start [/forum/topic.php?fid=46&tid=1699768]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
179ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 284ms |
0 / 0 |