|
Остатки на каждый день
|
|||
---|---|---|---|
#18+
Всем привет. Помогите, пожалуйста, новичку в написании запроса по определению остатков (накопительный итог) на каждый день. Есть таблица Итогов - накопительный итог на каждый первый день месяца. Есть таблица Движений - движения в разные дни. Таблица Календарь - созданая мной таблица на каждую дату которой нужно опредлелить остаток. Результатом запроса должен быть аналог таблицы Итоги но на каждую календарную дату а не на первый день месяца. Я понимаю что нужно как то использовать в запросе таблицу Итогов (для того чтоб не считать все из таблицы Движений, что более ресурсоемко) но как это сделать не знаю. Прошу помощи, уверен с этим люди сталкивались в работе. Для удобства, сделал скрипт по созданию таблиц с тестовыми данными. --Создание табл Календарь declare @Calendar table ([CalendarDate] datetime)--,[DayTypeID] int,[Hours] money) declare @i datetime set @i='20200101' while @i<='20200301' begin INSERT INTO @Calendar([CalendarDate])--,[DayTypeID],[Hours]) select @i--,20,8.000 set @i=@i+1 end select * from @Calendar -- Создание табл Остатков create table #Remains ( [Дата] datetime, [Вид] nvarchar(20), [Тип] nvarchar(20), [Название] nvarchar(20), [Сумма] int ) -- inserting test data into Remains insert #Remains values('2020-01-01', 'Вид-1', 'Тип-1', 'Назв-1', 10) insert #Remains values('2020-01-01', 'Вид-1', 'Тип-1', 'Назв-2', 5) insert #Remains values('2020-02-01', 'Вид-1', 'Тип-1', 'Назв-1', 9) insert #Remains values('2020-02-01', 'Вид-1', 'Тип-1', 'Назв-2', 5) insert #Remains values('2020-02-01', 'Вид-2', 'Тип-1', 'Назв-2', 7) insert #Remains values('2020-03-01', 'Вид-1', 'Тип-1', 'Назв-1', 6) select * from #Remains -- Создание табл Движений create table #Moves ( [Дата] datetime, [Вид] nvarchar(20), [Тип] nvarchar(20), [Название] nvarchar(20), [Сумма] int ) -- inserting test data into Remains insert #Moves values('2020-01-01', 'Вид-1', 'Тип-1', 'Назв-1', 10) insert #Moves values('2020-01-02', 'Вид-1', 'Тип-1', 'Назв-2', 5) insert #Moves values('2020-02-01', 'Вид-2', 'Тип-1', 'Назв-1', 7) insert #Moves values('2020-02-12', 'Вид-3', 'Тип-2', 'Назв-1', 3) select * from #Moves Версия SQL Server : Microsoft SQL Server 2019 (RC1) - 15.0.1900.25 (X64) Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 13:02 |
|
Остатки на каждый день
|
|||
---|---|---|---|
#18+
newoneman, Итоги не нужны, надо рассчитать накопительный итог по Движению. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 14:24 |
|
Остатки на каждый день
|
|||
---|---|---|---|
#18+
Владислав Колосов Итоги не нужны Буратино дали два яблока, а потом три забрали. Сколько яблок осталось у Буратино? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 14:27 |
|
Остатки на каждый день
|
|||
---|---|---|---|
#18+
Владислав Колосов newoneman, Итоги не нужны, надо рассчитать накопительный итог по Движению. Разве не использовать таблицу Итогов это верное решение с точки зрения оптимального решения? Я думал, что таблицу Итоги можно использовать как вспомогательную, что бы не считать накоп.итог каждый раз с самого первого дня. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 15:11 |
|
Остатки на каждый день
|
|||
---|---|---|---|
#18+
newoneman, эта таблица никак не поможет, т.к. в ней хранятся срезы накопительного итога таблицы движений, контрольные точки. Сомневаюсь, что движения хранятся относительно последнего среза. Таблица итогов уже будет находится в данных при расчете нарастающего итога по таблице движений. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 15:29 |
|
Остатки на каждый день
|
|||
---|---|---|---|
#18+
не пойму, в движении только расход хранится? А приход где? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 15:31 |
|
Остатки на каждый день
|
|||
---|---|---|---|
#18+
Владислав Колосов не пойму, в движении только расход хранится? А приход где? Там и приход и расход. Да, немного не верный пример сделал. Суммы с плюсом или с минусом в таблице Движений. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 15:49 |
|
Остатки на каждый день
|
|||
---|---|---|---|
#18+
newoneman, Код: 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. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 16:51 |
|
Остатки на каждый день
|
|||
---|---|---|---|
#18+
invm, Спасибо тебе добрый человек. Буду разбираться и использовать. Еще раз спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 17:02 |
|
Остатки на каждый день
|
|||
---|---|---|---|
#18+
newoneman, откуда возникли такие остатки на 1 февраля? Данные нерепрезентативны. На 1 января Назв-1 остаток 10, движение - приход 10, а на 1 февраля Вы пишете остаток 9. Куда делись 11 единиц? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 23:05 |
|
Остатки на каждый день
|
|||
---|---|---|---|
#18+
newoneman, авторИтоги можно использовать как вспомогательную, что бы не считать накоп.итог каждый раз с самого первого дня. Не так, накопительный итог рассчитывается одним запросом, а не за каждый день отдельно. sum([сумма]) over(order by дата) В результат попадут и "срезы" итогов. Если в какой-то день по календарю не было движения, то используем фиктивное движение 0 рублей за этот день. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2020, 23:10 |
|
|
start [/forum/topic.php?fid=46&gotonew=1&tid=1685850]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
281ms |
get topic data: |
11ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 271ms |
total: | 659ms |
0 / 0 |