Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Накопительный итог, с добавками  [new]
asdor
Member

Откуда: Москва
Сообщений: 484
Есть бочка с топливом.
Туда топливо заливают иногда.
И от туда его забирают.

Нужен получить ск. когда там было топлива
Все упростил
declare @tancer table (dat date,qty int)
Insert into @tancer values 
('2018-10-10',2000),
('2018-10-15',2000)

declare @consumer table (dat date,qty int)
Insert into @consumer values 

('2018-10-01',100),
('2018-10-02',200),
('2018-10-03',100),
('2018-10-04',100),
('2018-10-05',100),
('2018-10-06',100),
('2018-10-07',100),
('2018-10-08',100),
('2018-10-09',100),
('2018-10-10',100),
('2018-10-11',100),
('2018-10-12',100),
('2018-10-13',100),
('2018-10-14',100),
('2018-10-15',100),
('2018-10-16',100),
('2018-10-17',100),
('2018-10-18',100),
('2018-10-19',100),
('2018-10-20',100),
('2018-10-21',100),
('2018-10-22',100)

--это начальное значение
declare @tanc	int=3000

select dat,qty, @tanc-sum(qty) over(order by dat) sm 
	from @consumer
	

Не получается адекватно добавить добавление из таблицы @tancer
Направьте...

На клиенте легко решается, но не нравится)
16 ноя 18, 15:53    [21736525]     Ответить | Цитировать Сообщить модератору
 Re: Накопительный итог, с добавками  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36972
; with b as (
    select
        a.dat
        , a.qty
    from    @tancer a
    union all 
    select
        a.dat
        , - a.qty
    from    @consumer a
)
select
    b.*
    , remainder = @tanc + sum ( qty ) over ( order by b.dat )
from    b  
order by
    b.dat 
16 ноя 18, 16:46    [21736598]     Ответить | Цитировать Сообщить модератору
 Re: Накопительный итог, с добавками  [new]
asdor
Member

Откуда: Москва
Сообщений: 484
Гавриленко Сергей Алексеевич,
Спасибо.
Когда видишь, как элементарно все решается, берет досада, почему сам не подумал в этом направлении.
Все же мешает, "процедурное" мышление
16 ноя 18, 19:58    [21736730]     Ответить | Цитировать Сообщить модератору
 Re: Накопительный итог, с добавками  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20533
А причина в том, что Вы один и тот же процесс "изменение количества" поделили на два - "добавление" и "отбор", хотя различие только в атрибуте (знак изменения).
16 ноя 18, 20:32    [21736759]     Ответить | Цитировать Сообщить модератору
 Re: Накопительный итог, с добавками  [new]
uaggster
Member

Откуда:
Сообщений: 827
Akina
А причина в том, что Вы один и тот же процесс "изменение количества" поделили на два - "добавление" и "отбор", хотя различие только в атрибуте (знак изменения).

Ага. Теперь в логике предусмотрите, чтобы в бочке не было отрицательных объемов топлива.
... и еще проверочный запрос сделайте, чтобы отрицательных объемов топлива не образовалось после любого из отборов.
:-))))))
19 ноя 18, 08:56    [21737767]     Ответить | Цитировать Сообщить модератору
 Re: Накопительный итог, с добавками  [new]
asdor
Member

Откуда: Москва
Сообщений: 484
uaggster,
Просто угадали.
Бочка виртуальная.
И нужно знать, когда ушли в минус, что бы "добавить".

Логика о которой вы говорите, в другом месте, и там все ясно.
И в данном случае, уход в минус, не причина, не заправляться, это просто сигнал, что надо еще платить)
19 ноя 18, 09:38    [21737790]     Ответить | Цитировать Сообщить модератору
 Re: Накопительный итог, с добавками  [new]
PizzaPizza
Member

Откуда:
Сообщений: 370
asdor
uaggster,
Просто угадали.
Бочка виртуальная.
И нужно знать, когда ушли в минус, что бы "добавить".

Логика о которой вы говорите, в другом месте, и там все ясно.
И в данном случае, уход в минус, не причина, не заправляться, это просто сигнал, что надо еще платить)


Поэтому то и речь идёт про одну таблицу. Одна бочка, одна сущность, одна таблица и две операции над ней.
Так как 99% вероятности, что цифры приход/расход записываются вручную, то наверняка существуют алгоритмы на фактическую усушку утруску, которые проще реализовать в приложении, чем базой, а одной таблицей управлять проще.
19 ноя 18, 10:06    [21737824]     Ответить | Цитировать Сообщить модератору
 Re: Накопительный итог, с добавками  [new]
asdor
Member

Откуда: Москва
Сообщений: 484
PizzaPizza,

Вы вообще не о том.
Залив в бочку, это таблица, помимо того, полно еще связанных сущностей.
Остаток в бочке на дату, от которого идут все танцы.
А расход их бочки, вообще, сопутсвующий процесс, совершенно других сущностей.
В частности, расход берется из путевки, при условии, что заправка их бочки.

То что вы предложили, видится в совсем примитивном случае.
19 ноя 18, 18:02    [21738414]     Ответить | Цитировать Сообщить модератору
 Re: Накопительный итог, с добавками  [new]
PizzaPizza
Member

Откуда:
Сообщений: 370
asdor,

Конечно у вас свой случай со своими, видимо, особенностями.

Я пишу про одну таблицу для тех, кто будет искать похожую на вашу задачу по форуму и что бы люди не копировали решение, а думали удобно ли будет им в их условиях. Если например у человека несколько ёмкостей, в которых надо учитывать приход/расход, то это по две таблицы на ёмкость - ну совсем неудобное решение может получиться к которому придется воротить запросы.
19 ноя 18, 22:03    [21738575]     Ответить | Цитировать Сообщить модератору
 Re: Накопительный итог, с добавками  [new]
asdor
Member

Откуда: Москва
Сообщений: 484
PizzaPizza
Конечно у вас свой случай со своими, видимо, особенностями.

Да никаких особых особенностей.
Все как у большинства, с мелочами.
Емкость, тут вообще не у дел.
Не путайте информационную задачу, с реальной.
Тут легко видится аналогия, с платежами - продажами.
Тоже в одну таблицу?
20 ноя 18, 08:14    [21738698]     Ответить | Цитировать Сообщить модератору
 Re: Накопительный итог, с добавками  [new]
PizzaPizza
Member

Откуда:
Сообщений: 370
asdor,

Это уже в раздел Проектирование БД тема.

Я не очень понимаю, что вы имеете под "платежами - продажами", видимо, если это аналогия с доливом/расходом топлива из бочки, то речь идет о деньгах приход/расход, то для меня решение однозначно в одну таблицу. Меня учили правилам, что для одной сущности родственные операции так делаются, хотя бы для целей масштабирования.

Вполне допускаю, что вы, с целью упрощения, опустили детали задачи, которые и определили подход именно с двумя таблицами. Например если у вас при заливе топлива в бочку в какой то момент залива происходит смена собственника топлива во всей бочке или вообще это превращается не в топливо, а в какую то топливную смесь и это надо все фиксировать...
20 ноя 18, 20:50    [21739516]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить