Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сумма предыдущих значений / 23 сообщений из 23, страница 1 из 1
23.05.2018, 15:42
    #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
23.05.2018, 15:44
    #39648829
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма предыдущих значений
emolenev,

ну, если версия позволяет, то sum([sum]) over(order by Index_data)
если только вместо нуля, то еще в кейс обернуть
...
Рейтинг: 0 / 0
23.05.2018, 15:45
    #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
23.05.2018, 15:54
    #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
23.05.2018, 15:57
    #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
23.05.2018, 16:06
    #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
23.05.2018, 16:08
    #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
23.05.2018, 16:12
    #39648857
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма предыдущих значений
Рекурсивным CTE можно...
...
Рейтинг: 0 / 0
23.05.2018, 16:19
    #39648862
emolenev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма предыдущих значений
Как написать запрос?
...
Рейтинг: 0 / 0
23.05.2018, 16:23
    #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
23.05.2018, 16:25
    #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
23.05.2018, 16:30
    #39648875
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма предыдущих значений
Посетитель,

а не, косяк. мой вариант не катит в таком виде.
...
Рейтинг: 0 / 0
23.05.2018, 17:44
    #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
24.05.2018, 19:30
    #39649568
emolenev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма предыдущих значений
TaPaK, спасибо. А если изменить задачу следующим образом: найти не сумму всех предыдущих а среднее значение.
...
Рейтинг: 0 / 0
24.05.2018, 19:49
    #39649572
emolenev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма предыдущих значений
TaPaK,

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


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

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

Сможешь помочь?
у меня лапки и пятница
...
Рейтинг: 0 / 0
25.05.2018, 14:32
    #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
25.05.2018, 14:37
    #39649941
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма предыдущих значений
emolenev,

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

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


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