Кумулативни остатъци с помощта на SQL

Използвам по-стара версия на sybase, която няма ключови думи като lead.

Искам да намеря кумулативен остатък.

Нека се опитам да обясня това с пример.

Начално количество = 500

Category   Time        Quantity        LeftOver
cat1      10:01:01.000     100           400 
cat1      10:01.01.001     50            350
cat1      10:01:01.002      0            350
cat1      10:01.01.003    100            250
cat1      10:01:03.001    100            150

Подобни редове са налични в cat2 и броят на редовете за категория е променлив.

Моля, имайте предвид, че по-горе съм подредил редовете във възходящ ред на времето.


person Zanam    schedule 09.01.2013    source източник
comment
какво ще кажете за 500 - sum(quantity) over (partition by category order by time), което генерира работещ sum() в стандартна съвместима база данни.   -  person a_horse_with_no_name    schedule 09.01.2013
comment
можете ли да ми напишете подробен код. Не съм много добър в SQL.   -  person Zanam    schedule 09.01.2013


Отговори (2)


Не знам дали Sybase поддържа това, но в PostgreSQL, Oracle и други можете да го направите

select category,
       time,
       quantity, 
       500 - sum(quantity) over (partition by category order by time) as leftover
from the_unknown_table;
order by category, time
person a_horse_with_no_name    schedule 09.01.2013
comment
Благодаря ще го пробвам. - person Zanam; 09.01.2013
comment
Получавам следната грешка, като използвам кода по-горе: Синтаксична грешка - Ключът за подреждане по трябва да бъде числови данни в рамката на прозореца RANGE. Може ли някой да помогне. Благодаря. - person Zanam; 11.01.2013
comment
@user1949158 И така, какво време за данни е TIME? - person a_horse_with_no_name; 11.01.2013
comment
TIME в моята база данни е от тип „timestamp“. И така, пример за време като в моята база данни е: „2012-03-23 ​​11:27:04.870000“. Благодаря - person Zanam; 11.01.2013
comment
@user1949158: очевидно Sybase не поддържа това тогава, защото работи в Oracle или PostgreSQL. - person a_horse_with_no_name; 11.01.2013
comment
Току-що започнах нова тема за конвертиране на времевия печат в unixtime. Това ще ми помогне да използвам ключовата дума за поръчка. Имате ли нещо против да отговорите на това? Благодаря - person Zanam; 11.01.2013

ИЗБЕРЕТЕ категория, SUM(500-(Количество)) ОТ table_name група по категория

OR

ИЗБЕРЕТЕ Category,(count(1)*500)-sum(Qunatity) FROM table_name group by Category

person Gopal Sanodiya    schedule 14.01.2013