powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сумма предыдущих значений
23 сообщений из 23, страница 1 из 1
Сумма предыдущих значений
    #39648827
emolenev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Очень нужна помощь. Есть таблица

Index_data | Sum
_____________________
20.10.2015 | 8
21.10.2015 | 2
22.10.2015 | 2
23.10.2015 | 5
24.10.2015 | 0
25.10.2015 | 0
26.10.2015 | 0

Как мне написать запрос, что бы вместо 0 выводилась сумма всех предыдущих элементов?
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39648829
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
emolenev,

ну, если версия позволяет, то sum([sum]) over(order by Index_data)
если только вместо нуля, то еще в кейс обернуть
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39648832
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
emolenev,

Код: sql
1.
SUM(Sum) OVER (ORDER BY Index_data ROWS  UNBOUNDED PRECEDING)



чудно
Код: sql
1.
 sum([sum]) over(order by Index_data)
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39648840
emolenev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получается не совсем то:
Index_data | Sum
_____________________
20.10.2015 | 8
21.10.2015 | 2
22.10.2015 | 2
23.10.2015 | 5
24.10.2015 | 17
25.10.2015 | 17
26.10.2015 | 17

А необходимо каждый последующий элемент это сумма предыдущих:
Index_data | Sum
_____________________
20.10.2015 | 8
21.10.2015 | 2
22.10.2015 | 2
23.10.2015 | 5
24.10.2015 | 17
25.10.2015 | 34
26.10.2015 | 68
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39648843
emolenev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKemolenev,

Код: sql
1.
SUM(Sum) OVER (ORDER BY Index_data ROWS  UNBOUNDED PRECEDING)



чудно
Код: sql
1.
 sum([sum]) over(order by Index_data)



Получается не совсем то:
Index_data | Sum
_____________________
20.10.2015 | 8
21.10.2015 | 2
22.10.2015 | 2
23.10.2015 | 5
24.10.2015 | 17
25.10.2015 | 17
26.10.2015 | 17

А необходимо каждый последующий элемент это сумма предыдущих:
Index_data | Sum
_____________________
20.10.2015 | 8
21.10.2015 | 2
22.10.2015 | 2
23.10.2015 | 5
24.10.2015 | 17
25.10.2015 | 34
26.10.2015 | 68
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39648850
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
emolenev,
слова расходятся с делом?
авторкаждый последующий элемент это сумма предыдущих:

автор20.10.2015 | 8
21.10.2015 | 2
22.10.2015 | 2
23.10.2015 | 5
24.10.2015 | 17
25.10.2015 | 34
26.10.2015 | 68
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39648853
emolenev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKemolenev,
слова расходятся с делом?
авторкаждый последующий элемент это сумма предыдущих:

автор20.10.2015 | 8
21.10.2015 | 2
22.10.2015 | 2
23.10.2015 | 5
24.10.2015 | 17
25.10.2015 | 34
26.10.2015 | 68

Я просто в первом сообщении написал, что если 0 то сумма предыдущих элементов.
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39648857
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекурсивным CTE можно...
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39648862
emolenev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как написать запрос?
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39648868
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
emolenev,
если в одну дату не может быть несколько записей, то как-нибудь так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with b as(
select index_data
      ,sum
      ,sum(case when sum=0 then 1 else 0 end)over(order by index_data rows unbounded preceding)r
  from your_table
)
select index_data,case sum 
                       when 0
                       then (select sum(c.sum*(b.r-c.r))
                               from b c
                              where c.index_data<b.index_data)
                       else sum
                  end
  from b                        


если могут быть, то сначала бы определиться в каком порядке их брать
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39648871
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
emolenev,

Код: 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.
DECLARE @a TABLE (a date, b int)
INSERT INTO @a (a,b) VALUES
('20 nov 2015' , 8),
('21 nov 2015' , 2),
('22 nov 2015' , 2),
('23 nov 2015' , 5),
('24 nov 2015' , 0),
('25 nov 2015' , 0),
('26 nov 2015' , 0)

;WITH  x as 
(
	SELECT
		a,b	
	FROM @a
	WHERE b <> 0	
	
	UNION ALL

	SELECT 
		y.a,	x.b
	FROM @a	 y	
	INNER JOIN x
	ON	x.a < y.a
	WHERE y.b = 0
	
	
)
SELECT a,SUM(b) 
FROM x
GROUP BY a
ORDER BY a
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39648875
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посетитель,

а не, косяк. мой вариант не катит в таком виде.
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39648910
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посетитель,
Скорее как то так, проверить не могу, у меня лапки
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
with b as(
select index_data
      ,sum
      ,sum(case when sum=0 then 1 else 0 end)over(order by index_data rows unbounded preceding)r
  from t1
)
select index_data,case sum 
                       when 0
                       then (select sum(s)
                               from (select c.sum*power(2,b.r-c.r-1)
                                       From b c
                                      where c.index_data<b.index_data) c(s)) 
                       else sum
                  end
  from b 
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39649568
emolenev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK, спасибо. А если изменить задачу следующим образом: найти не сумму всех предыдущих а среднее значение.
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39649572
emolenev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

И каждое среднее умножать на коэффициент. Соответственно следующее среднее будет от ненулеввх значений и среднего*на коэффициент
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39649681
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
emolenev,


...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39649688
emolenev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,
)) Извини, надо было сразу попросить. Буду очень признателен.
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39649756
emolenev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

Сможешь помочь?
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39649757
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
emolenevTaPaK,

Сможешь помочь?
у меня лапки и пятница
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39649937
emolenev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посетитель, твой вариант тоже работает :)
Спасибо. А если изменить задачу следующим образом: если 0 найти не сумму всех предыдущих а среднее значение. И каждое среднее умножать на коэффициент. Соответственно следующее среднее будет от ненулевых значений и среднего*на коэффициент

Index_data | Sum |koef
_____________________
20.10.2015 | 8 | 1.2
21.10.2015 | 2 | 0.8
22.10.2015 | 2 | 0.5
23.10.2015 | 5 |1.29
24.10.2015 | 0 | 1.31
25.10.2015 | 0 |1.24
26.10.2015 | 0 |1.6

получится ряд
8, 2, 2, 5 , среднее(8+2+2+5)*1.31, среднее(8+2+2+5+среднее(8+2+2+5)*1.31)*1.24 и так далее
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39649941
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
emolenev,

а у меня еще со среды лапки.
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39649953
emolenev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, кто-нибудь может еще помочь?
...
Рейтинг: 0 / 0
Сумма предыдущих значений
    #39650099
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
emolenev,

причем здесь ноль и сумма предыдущих значений? У Вас кривая архитектура данных. В реляционной базе значения атрибутов не зависят друг от друга ни по вертикали, ни по горизонтали. А как Вы их там умножать будете - забота клиентского приложения, работающего с массивами.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сумма предыдущих значений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]