|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
Здравствуйте! Работаю с Sybase, ASE номер по памяти не помню, увы. Если Вам не сложно, не могли бы вы помочь решить одну задачку: Есть таблица: Имя|Дата|Значение|Сумма| табличка отсортированная по столбцам Имя и Дата, а вот с заполнением столбца Сумма у меня загвоздка. В этом столбце должна быть сумма всех предыдущих значений для столбца Значение. То есть примерно так: Значение|Сумма| 1| 1| 1| 2| 1| 3| 1| 4| Если писать Sum в лоб, то он считает сумму всего столбца и плевать он хотел, что это временная таблица, которая в этот момент и создается. Так посчитать вообще реально? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2012, 23:09 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
SamantaBlack, а как у Вас именно приведенные цифры получаются? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2012, 23:24 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
SamantaBlack, кажется понял. попробуйте так: Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2012, 23:29 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
> табличка отсортированная по столбцам Имя и Дата, а вот с заполнением столбца > Сумма у меня загвоздка. В этом столбце должна быть сумма всех предыдущих > значений для столбца Значение. То есть примерно так: Это извини тебе не Эксель, это реляционная БД. Выбирай свои данные в эксель и там такой фигнёй занимайся. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2012, 01:55 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
MasterZivЭто извини тебе не Эксель, это реляционная БД. Выбирай свои данные в эксель и там такой фигнёй занимайся. Если вы не знаете, как решить задачу, это не делает ее фигней. Задачка вполне реальна и благодаря помощи людей, сегодня утром я закрыла проект. ^^ А посылать в эксеот грубо, толсто и не смешно, видимо вы сами все решаете в экселе. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2012, 14:16 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
СуммаПредыдущихSamantaBlack, кажется понял. попробуйте так: Код: sql 1. 2. 3. 4. 5.
спасибо, и я дурак не смог отредактировать сообщение. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2012, 14:17 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
> Если вы не знаете, как решить задачу, это не делает ее фигней. Задачка вполне > реальна и благодаря помощи людей, сегодня утром я закрыла проект. ^^ А посылать > в эксеот грубо, толсто и не смешно, видимо вы сами все решаете в экселе. Это ты должен прежде всего понимать, какими средствами какие задачи надо решать. И использовать подходящие. А ты видимо недогоняешь... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2012, 15:12 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
SamantaBlack, Не знаток ASE, да и версия не известна. В ASA с 11-й версии можно делать так- Код: sql 1. 2. 3. 4.
Если в вашей СУБД OLAP функции работают, то подсчёт суммы нарастающим итогом почти мгновенен и не загружает сервер, как в вышеуказанном способе. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2012, 20:02 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
MasterZivЭто ты должен прежде всего понимать, какими средствами какие задачи надо решать. И использовать подходящие. А ты видимо недогоняешь... а что, нарастающий Этог - задача, непосильная для SQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2012, 19:54 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
SamantaBlackСуммаПредыдущихSamantaBlack, кажется понял. попробуйте так: Код: sql 1. 2. 3. 4. 5.
спасибо, и я дурак не смог отредактировать сообщение. Ну круто че... Таблицу надо заполнять исходя из предыдущих значений? MasterZiv, все Вам правильно написал а Вы не прислушались. Просто закрыли проект. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2012, 21:58 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
> а что, нарастающий Этог - задача, непосильная для SQL? В общем-то да. Она противоречит основной модели хранения данных -- таблица есть множество неупрорядоченных кортежей. Все операции, связанные с обработкой строк в определённом порядке, проблемные для SQL -- он для этого не предназначен. Конечно, в конкретной СУБД могут быть какие-то расширения для этого, тогда их можно использовать. В ASE такого нет, есть только compute by, но там окна не плавающие, фиксированные, как в group by, ну и далеко не все клиенты поддерживают это. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2012, 11:44 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
MasterZiv, И что вы предлагаете? допустим, мне на некоем участке обработки данных необходимо посчитать нарастающий итог. Примем, что я считаю, что это не SQL-ная задача. То есть, я должен выгрузить полученные данные во внешнюю систему, там написать некий обработчик, а затем повторно из загрузить обратно, так как результат был только промежуточным, и требуется его дальнейшая обработка средствами SQL. Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2012, 11:49 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
Хоть мне это и не нравится, но считать нарастающие итоги, суммы по окнам с учетом порядка строк и прочие такого радоа вещи является стандартизованной функцией современного языка SQL. Так что нравится или нет, но ОЛАП функционал неизбежен. Отсутствие его поддержки в АСЕ - проблема АСЕ. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2012, 17:33 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
Не могу сказать что MasterZiv с его пуританскими взглядами так уж сильно не прав. Но и его оппонента тоже высказывает здравые мысли. Нужна ли позиционная аналитика на РСУБД это вопрос давний и сложный. С одной стороны вся такая аналитика намного удобнее делается на клиенте где можно играть и с массивами и с циклами. Но с другой стороны, чтобы это все делать на клиенте надо сначала вытащить на клиента сырые данные, а их может быть очень много. В моей практике ни разу не требовалось записывать результаты анализа обратно в базу и они никогда не были основой для вторичной обработки. Так что на мой взгляд СуммаПредыдущих в сообщении 13104200 был не прав. Теоретически сценарий описанный им возможен, но я ни разу не встречался с подобным в реальности. Но вот на прошлой неделе мне пришлось обработать несколько миллионов записей в поиске среднего статистического ... И я очень-очень-очень горевал что мне приходится это делать в ASE а не в IQ. OLAP функции может быть и идут вразрез с моделью хранения неупорядоченных данных, но зато они очень облегчают реальную жизнь. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2012, 19:07 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
вот почитайте например об одном очень полезном нововведении: row pattern matching Оно как раз реализовано как расширение window-функций. http://iablog.sybase.com/paulley/2008/04/sql-row-pattern-matching/ Насчет вытащить на эксель. Обрабатывать данные в декларативном стиле намного проще и быстрее, чем трахаться с каким-то клиентами, примитивными императивными средствами обработки данных там. Потом чуть что - перекомпилируй этого клиента. Не, полная фигня. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2012, 21:32 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
On 09/03/2012 12:49 PM, СуммаПредыдущих wrote: > И что вы предлагаете? Я уже говорил, такое надо делать на клиенте. Есть всякие эксели, всякие отчётные системы типа fast report, Crystall report и т.д, они всё это умеют делать очень хорошо. > допустим, мне на некоем участке обработки данных необходимо посчитать > нарастающий итог. > Примем, что я считаю, что это не SQL-ная задача. > То есть, я должен выгрузить полученные данные во внешнюю систему, там написать > некий обработчик, а затем повторно из загрузить обратно, так как результат был > только промежуточным, и требуется его дальнейшая обработка средствами SQL. Так? Нарастающий итог тебе в БД не нужен. Он нужен для представления информации людям. Или у тебя бизнес-логика на это завязана ? Очень сомневаюсь. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2012, 00:19 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
> Насчет вытащить на эксель. Обрабатывать данные в декларативном стиле намного > проще и быстрее, чем трахаться с каким-то клиентами, примитивными императивными > средствами обработки данных там. Потом чуть что - перекомпилируй этого клиента. Так в конце концов, если это надо делать в БД, -- есть средсва, курсоры. Только не SQL. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2012, 00:21 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
MasterZiv > Насчет вытащить на эксель. Обрабатывать данные в декларативном стиле намного > проще и быстрее, чем трахаться с каким-то клиентами, примитивными императивными > средствами обработки данных там. Потом чуть что - перекомпилируй этого клиента. Так в конце концов, если это надо делать в БД, -- есть средсва, курсоры. Только не SQL. Ну почему сразу "только не SQL"? Вполне себе SQL и даже без курсоров. Одним SQL-92 можно обойтись и без больших проблем. Добавляешь поле-счетчик, обновляешь его через sum() или count() как уже показано 13072960 и все. Хотя с OLAP все равно жить легче :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2012, 01:41 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
похоже, для некоторых это уже религия. кто-то не приемлет нарастающий итог(вот уж никогда бы не подумал, что это не SQL-задача) кому-то претят сортировки(!)на уровне сервера(уж они-то часто нужны не только для вывода итогового датасета. взять хотя бы предложение считать нарастающий итог курсором :) ) я же вот не понимаю, зачем создавать лишние потоки данных сервер-клиент-сервер ради какой-то идеологии. тем более, как справедливо заметил White Owl, данных для передачи на клиента может оказаться очень много. а что если при этом клиент и сервер соединены каким-нибудь 64-Кбитным каналом? По мне, так на клиенте должна производиться только "шлифовка" данных. приделывание рюшечек, сортировка отображения, форматирование вывода. не более того. все остальное должен уметь сервер. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2012, 23:32 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
MasterZivЕсть всякие эксели, всякие отчётные системы типа fast report, Crystall report и т.д, они всё это умеют делать очень хорошо. кстати, встретился мне случай у заказчика. Crystal Reports, которому была отведена роль всего лишь формировать csv-шник по готовому датасету из процедуры, преспокойненько падал при попытке захавать более 100 тысяч строк. И это ему еще не поручили сортировки-группировки и прочие прелести, милостиво оставив их на уровне сервера. вот тебе и "очень хорошо" ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2012, 23:39 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
> Crystal Reports, которому была отведена роль всего лишь формировать csv-шник по > готовому датасету из процедуры, преспокойненько падал при попытке захавать более > 100 тысяч строк. > И это ему еще не поручили сортировки-группировки и прочие прелести, милостиво > оставив их на уровне сервера. > вот тебе и "очень хорошо" 0) 100 тыщ строк -- не задача для отчётника. Ему неск. десятков тыщ. 1) Кристал говно. Это продукт написанный идиотами. Немудрено. Мне блин его пришлось хакать только чтобы он просто к БД коннектился. 2) Нафига там вообще отчётник, если это делает BCP или утилитку саммому можно написать за 3 дня ? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2012, 20:04 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
MasterZiv, что ж такое! 1. SQL для нарастающего итога нельзя, так как это не его задача 2. кристал - не пойдет, объемы не те 3. BCP тоже вряд ли его посчитает. ;) писать утилиту/дорабатывать клиента? и так под каждый отчет? а если их десятки, и каждый со своими "не-SQL" заморочками? а если пользователи территориально разбросаны? еженедельно рассылать обновления клиентской части? и держать штат региональных ИТ-специалистов. жесть какая-то! зато принципы... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2012, 20:58 |
|
Сумма предыдущих значений
|
|||
---|---|---|---|
#18+
Задача думаю вполне SQL - analytics, нарастающий итог ("running totals"). По большому счету предпочел бы все на SQL делать (Пропавший без вести Jim Gray работал над этим BTW) На эту тему и близлезащие (Running Average (sum->avg), Running multiplication (sum->"mult"), Clipping (Set without smallest, greatest), Unique numbering of rows (sum -> count), Statistical median, Financial median, etc..) довольно обширная литература начиная по-видимому с классической работы "Optimizing Transact SQL: Advanced Programming Technique" by David Rozenstein PH.D, Anatoly Abramovich, Ph.D, Eugene Birger Ph.D (SQL Forum Press, 1995). (также Joe Celko books like "SQL for Smarties", "Analytics and OLAP in SQL"; "Transact-SQL Cookbook" by Alek Spetic and Jonathahn Gennick 2002 O'Reilly; "SQL Cookbook" O'Reilly by Anthony Molinaro ) B "продвинутых СУБД" (в этом смысле) типа Sybase ASA, Sybase IQ, Oracle, DB2, MS SQL Server 2012, PostGres, решается в настоящее время с помощью "window functions" - используя "over", "row-number", etc... как было упомянуто в предыдущих постах или встроенной olap function. B Sybase ASE можно использовать 1. Correlated subquery in select list (как было упомянуто) c <= 2. Self-Join по <= У меня получалось на ASE 12.5, 15.0.3 1. быстрее чем 2. ( 5 Reads vs 32/24 Reads) на примере типа: (большие обьемы не обсуждаются + такие задачки часто задают на интервью (обычно на self-join <=), сам заинтересовался после одного проваленного ) Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2012, 19:03 |
|
|
start [/forum/topic.php?fid=55&fpage=14&tid=2010075]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 151ms |
0 / 0 |