|
Учет трех остатков
|
|||
---|---|---|---|
#18+
Доброго дня. Вопрос по учету нескольких остатков. Есть следующая таблица с суммарными оборотами поступлений и списаний за день (dt). Код: 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.
Нужно найти значения трех категорий остатков (искомые значение даны): - outbal_1 - outbal_2 - outbal_3 И соответствующие им три вида поступлений: - in_1 - in_2 - in_3 Есть определенная логика списаний ( out_A и out_B ) из остатков. Списания out_A списываются из остатков в следующей последовательности: outbal_1 , outbal_2 , outbal_3 . Т.е. если в остатке outbal_1 не хватает средств на out_A , то недостающая сумма списывается с outbal_2 . Если же на outbal_2 не хватает, то оставшаяся недостающая сумма списывается с outbal_3 У списаний out_B такая же логика, только приоритет источников в обратном порядке: outbal_3, outbal_2, outbal_1 . Я думал считать остатки используя рекурсию и через case when, но выходит довольно запутанно из-за большого количества case when.. Как-то проще это делается?) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2020, 22:09 |
|
Учет трех остатков
|
|||
---|---|---|---|
#18+
mrbungle, нерекурсивные решения рекурсивных вещей, когда возможно - сложнее в разы. К тому-же во float хранить? Вам будет проще собраться с силами и сделать рекурсией. Надеюсь данных не миллионы. Только к примеру - вычислить только outbal_1(от out_A) нерекурсивно - четыре уровня вложенности. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2020, 03:02 |
|
Учет трех остатков
|
|||
---|---|---|---|
#18+
Осподе, милосердный! Доколе?!!! Кто придумал эту структуру данных, эту жуткую жуть? "если в остатке outbal_1 не хватает средств на out_A, то недостающая сумма списывается с outbal_2. Если же на outbal_2 не хватает, то оставшаяся недостающая сумма списывается с outbal_3" Списывается "в пределах СТРОКИ" или "СО ВСЕХ ПРЕДЫДУЩИХ строк"? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2020, 08:10 |
|
Учет трех остатков
|
|||
---|---|---|---|
#18+
aleks222 Кто придумал эту структуру данных, эту жуткую жуть? Очевидно, клонировали любимую эксельную таблицу, в которой "считалось всё". ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2020, 09:02 |
|
Учет трех остатков
|
|||
---|---|---|---|
#18+
mrbungle, out_B рассчитывается независимо, или с учетом того, что было списано в out_A? и да, списание в пределах одной строки либо накопительный итог по всему что было? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2020, 09:54 |
|
Учет трех остатков
|
|||
---|---|---|---|
#18+
Shakill mrbungle, out_B рассчитывается независимо, или с учетом того, что было списано в out_A? и да, списание в пределах одной строки либо накопительный итог по всему что было? 1. С учетом списания out_A. 2. Накопительный итог. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2020, 10:17 |
|
Учет трех остатков
|
|||
---|---|---|---|
#18+
mrbungle Shakill mrbungle, out_B рассчитывается независимо, или с учетом того, что было списано в out_A? и да, списание в пределах одной строки либо накопительный итог по всему что было? 1. С учетом списания out_A. 2. Накопительный итог. ну да, рекурсия и кейсы что-то такое Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2020, 12:20 |
|
Учет трех остатков
|
|||
---|---|---|---|
#18+
Shakill, CASEы выглядят громоздко, но работают как правило быстро. Рекурсия тут на реальных данных, скорее всего ляжет. Надо идти в цикле по дням и фикчировать результат по каждому дню. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2020, 13:07 |
|
Учет трех остатков
|
|||
---|---|---|---|
#18+
a_voronin, ну это уже от объемов зависит. дней не так уж и много ) можно да, копить агрегаты или через native процедуру на лету считать ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2020, 13:39 |
|
|
start [/forum/topic.php?fid=46&msg=39948288&tid=1686212]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
255ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 262ms |
total: | 621ms |
0 / 0 |