Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как посчитать следующее значение по формуле от предыдущего?  [new]
User2155
Member

Откуда:
Сообщений: 150
Есть таблица и там 200 записей. 2 Колонки:
- my_value;
- my_calculated_value.
Первая запись my_value эталон. Все последующие должны считаться по формуле от предыдущего, скажем +10.
Т.е. сначала считается предыдущая запись, затем следующая. Как бы это сделать?

-- Создание таблицы
drop table if exists #tbl_check;
create table #tbl_check (
	row_id int identity(1,1) primary key,
	my_value int,
	my_calculated_value int)


/*следующие 2 строки надо запустить отдельно от предыдущих, чтобы вставить 200 записей в таблицу*/
insert into #tbl_check (my_value) values(1);
go 200

-- Эталон!
update #tbl_check set my_value = 100 where (row_id = 1);


-- Значения в колонке my_calculated_value должны вычисляться по формуле:
-- первое - эталон + 10
-- все последующие - предыдущее значение + 10. Как это сделать?
select *,
		lag(my_value, 1, 0) over (order by row_id) + 10 as my_calc
from #tbl_check
1 фев 19, 09:34    [21799323]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать следующее значение по формуле от предыдущего?  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1467
User2155,

тут всё же нужно определиться. или считается по линейной формуле "числового ряда" (каждое последующее = предыдущее + 10), или же вычисления более сложные и зависят не только от взаимного положения строк в итоговой выборке, но и ещё от каких-то условий, не зависящих от положения текущей строки (к примеру - считать накопительный итог, но по достижении суммы определенного размера - начинать считать с нуля).
в первом случае можно решить все при помощи аналитических (оконных) функций. во втором - потребуется рекурсивность
1 фев 19, 09:40    [21799333]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать следующее значение по формуле от предыдущего?  [new]
User2155
Member

Откуда:
Сообщений: 150
Щукина Анна,

Формула линейная. Проблема в том, что точно известно только первое значение, а все последующие должны считаться как "Предыдущее + 10".
1 фев 19, 09:48    [21799339]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать следующее значение по формуле от предыдущего?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20538
User2155
Формула линейная. Проблема в том, что точно известно только первое значение, а все последующие должны считаться как "Предыдущее + 10".

Т.е. тупо

first_value(my_value) over (order by row_id) + delta * (row_number() over (order by row_id) - 1) as my_calc
1 фев 19, 10:06    [21799362]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать следующее значение по формуле от предыдущего?  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2384
Блог
User2155
Щукина Анна,

Формула линейная. Проблема в том, что точно известно только первое значение, а все последующие должны считаться как "Предыдущее + 10".
Что такое "следующие"? Что определяет порядок?
1 фев 19, 10:38    [21799388]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать следующее значение по формуле от предыдущего?  [new]
User2155
Member

Откуда:
Сообщений: 150
Павел Воронцов,

в данном случае row_id.
1 фев 19, 11:06    [21799419]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать следующее значение по формуле от предыдущего?  [new]
pahanitto
Member

Откуда:
Сообщений: 28
Akina,

я так понял что ему возрастающюю суммц надо от предыдыщего?

те у него строки
1
2
4
6
4
а в итоге
1
3
7
13
17
если так о говори код скину
так?
1 фев 19, 23:47    [21800228]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить