[SQL][MSsql] Накопительная сумма, или итог.

kill-still

есть таблица
1|1
2|5
3|2
4|1
надо посчитать накопительный итог от начала к концу:
1|1|1
2|5|6
3|2|8
4|1|9
неужели нельзя обойтись без вложенного запроса, который жутко неэффективен по времени?
нагуглил только одну статью пока что:
http://www.mail-archive.com/pgsql-postgresql.org/msg0498...
где говорится, что на чистом скуле нельзя.
З.Ы. PL развращает.

kill-still

Я тут подумал - ещё кроссджойн можно - быстрее будет работать, но если таблица входная возвращается подзапросом, то её придётся дважды писать, что равносильно, или юзать with, что не везде возможно.

hprt

плохо гуглишь. на том же скульру тысячу раз разжевывалось
Вкратце - на маленьких объемах джойнь (лучше апплаем на больших курсором

kill-still

На больших лучше поставить оракл и не париться со всякой ерундой =)
SUM(**) OVER(ORDER BY *** ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
З.Ы. спасибо, не первый раз уже. :)

hprt

Я понимаю, что "лучше поставить оракл", но оракл не панацея, и хз сколько проблем ты еще огребешь. Тем более, ты, уж прости. Плюс оцени стоимость перевода продукта с одной субд на другую ;)
Второе - ты задал вопрос по MSSQL, при этом ты во всем интернете умудрился найти одну единственную ссылку, и ту посвященную Postgre! В шоке честно говоря

kill-still

ну, меня интересовал вопрос можно ли такое сделать на "чистом" SQL
а Postgre/MSSQL - в принципе не важно - кубики одинаковые, из которых можно мастерить.
я просто в кои-то веки зашёл на sql-ex.ru , а там новые задачки появились.

hprt

Лучше б ты sql.ru почаще читал, а лучше более познавательные ресурсы.
Ну и еще раз - не бывает "чистого" SQL - бывает сиквел и доп средства в реализации СУБД, и твои "одинаковые кубики" запросто не будут работать. Те же курсоры - уже не сиквел, однако почти везде есть.

mbolik1

ну, меня интересовал вопрос можно ли такое сделать на "чистом" SQL
Что ты понимаешь под "чистым SQL" — SQL как он есть в SQL Server 2005 минус навароты от Microsoft?
З.ы. На чистом SQL:2003 это делается так же как в Oracle.
Оставить комментарий
Имя или ник:
Комментарий: