|
Помогите с агрегированным запросом
|
|||
---|---|---|---|
#18+
Привет всем. у меня есть поля в таблице DATE NAME Count 1 aaa 1 1 aab 2 2 bbb 23 3 ccc 3 .............. Как мне получить выборку: DATE NAME COUNT ALL 1 aaa 1 1 1 aab 2 3 2 bbb 23 26 3 ccc 3 29 Заранее спасибо за советы. А вообще задача - есть 2 таблицы - платежей и счетов-фактур. Нужно по ним составить акт сверки. Это так, для пояснения. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2002, 11:06 |
|
Помогите с агрегированным запросом
|
|||
---|---|---|---|
#18+
Судя по всему, тебе важен здесь порядок записей по дате, иначе сводка ляжет не шефу на стол, а в мусорную корзину. :-)) select t.date, t.name, t.count (select nvl(sum(t1.count)+t.count,0) from my_tabla t1 where t1.date < t.date) cumulative from my_tabla t order by t.date И еще одно - date, count - это зарезервированные слова. Если не трудно - обойдись в названиях без них. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2002, 13:53 |
|
Помогите с агрегированным запросом
|
|||
---|---|---|---|
#18+
Спасибо. Все заработало на ура. Замечание принято :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2002, 14:22 |
|
Помогите с агрегированным запросом
|
|||
---|---|---|---|
#18+
Закралась одна маленькая ошибка. Первая строка неправильно итог отображает. В новой редакции запрос выглядит так: select t.date, t.name, t.count (select nvl(sum(t1.count),0)+t.count from my_tabla t1 where t1.date < t.date) cumulative from my_tabla t order by t.date Теперь ВСЕ работает! :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2002, 15:16 |
|
Помогите с агрегированным запросом
|
|||
---|---|---|---|
#18+
Закралась одна маленькая ошибка. Первая строка неправильно итог отображает. В новой редакции запрос выглядит так: select t.date, t.name, t.count (select nvl(sum(t1.count),0)+t.count from my_tabla t1 where t1.date < t.date) cumulative from my_tabla t order by t.date Теперь ВСЕ работает! :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2002, 15:17 |
|
Помогите с агрегированным запросом
|
|||
---|---|---|---|
#18+
Нашлось более оригинальное решение. SELECT Count1, DATE1, NAME, SUM(Count1)OVER (ORDER BY Date1 ASC ROWS UNBOUNDED PRECEDING ) AS Sum1 FROM A ORDER BY Date1 ASC; Главное, работает быстро :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2002, 11:03 |
|
Помогите с агрегированным запросом
|
|||
---|---|---|---|
#18+
Господа, а что это за SQL такой, который позволяет все эти: OVER ROWS UNBOUNDED PRECEDING CUMULATIVE не ставить запятые между колонками Это на Девятке такие извращения пошли? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2002, 11:18 |
|
Помогите с агрегированным запросом
|
|||
---|---|---|---|
#18+
С этого же сайта ссылка. http://www.olap.ru/trends/news/m010122726.asp В общем, мне наверно следовало бы почитать это перед тем как тему постить, но с такой задачей столкнулся впервые, поэтому даже не знал, с какой стороны подойти. В предыдущих примерах одна запятая пропущена, ну и CUMULATIVE - это новое название поля, следует понимать как as CUMULATIVE. У меня в восьмерке работает :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2002, 15:39 |
|
Помогите с агрегированным запросом
|
|||
---|---|---|---|
#18+
А чем плох в данном случае классический GROUP BY ? Сильно ли он тормозит, по сравнению с OLAP наворотами? А select в select разве лучше? [select t.date1,t.name,t.count1,nvl(sum(t1.count1),0)+t.count1 as sum1 from tabl t, tabl t1 where t1.date1(+)<t.date1 group by t.date1, t.name, t.count1 order by t.date1] ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2002, 11:01 |
|
|
start [/forum/topic.php?fid=52&gotonew=1&tid=1993235]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
9ms |
get first new msg: |
8ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 282ms |
total: | 426ms |
0 / 0 |