Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MSQL зависимость расчета от предыдущей строки / 12 сообщений из 12, страница 1 из 1
24.09.2018, 14:33
    #39707052
Focha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSQL зависимость расчета от предыдущей строки
Ребят, знаю как через курсор, но долго, да и курсор не охота использовать
Необходимо складывать предыдущие строки и когда сумма будет равна или больше единицы, записать значение целого числа.
Во вложение файл

Модератор: Вложение удалено.
...
Рейтинг: 0 / 0
24.09.2018, 14:36
    #39707057
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSQL зависимость расчета от предыдущей строки
Во вложении было вот это:
...
Рейтинг: 0 / 0
24.09.2018, 14:43
    #39707064
Focha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSQL зависимость расчета от предыдущей строки
Гавриленко Сергей АлексеевичВо вложении было вот это:
Спасибо

Вот добавил еще столбцы, может так будет понятней
...
Рейтинг: 0 / 0
24.09.2018, 14:50
    #39707076
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSQL зависимость расчета от предыдущей строки
Focha,

пронумеровать row-number-ом, и потом рекурсивным СТЕ, - будет проще всего
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
;with cte as (
	select
		[buffer]=case when [plan]>=1 then 0 else [plan] end
		,plan_smalli=case when [plan]>=1 then floor([plan]) end
		, ... 
	from T 
	where rn=1
	
	union all
	
	select
		[buffer]=case when cte.[buffer]+T.[plan]>=1 then 0 else cte.[buffer]+T.[plan] end
		,plan_smalli=case when cte.[buffer]+T.[plan]>=1 then floor(cte.[buffer]+T.[plan]) end
		, ...
	from cte inner join T on cte.rn=T.rn-1)
select * from cte order by rn 
...
Рейтинг: 0 / 0
24.09.2018, 14:50
    #39707077
iiyama
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSQL зависимость расчета от предыдущей строки
Focha,
Немного офф,
Смешанные ощущения, вроде вы не новичек и писать Вам про скрипты создания и заполнения данными-лишнее с другой стороны ни того ни даже версии сервера не видно, чуднО

А по теме- нарастающий итог давно считается без курсоров, посмотреть "предыдущее" значение с явным определенным порядком тоже не проблема
...
Рейтинг: 0 / 0
24.09.2018, 14:53
    #39707079
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSQL зависимость расчета от предыдущей строки
Focha,

Код: sql
1.
2.
3.
4.
5.
6.
with a as
    (select * from(values(201908,0.298645),(201907,0.395862),(201906,0.496441),(201905,0.594498),(201904,0.613721),(201903,0.72629)
                        ,(201902,0.819897),(201901,1.184565))a(a,b))
select *,case when floor(c)>floor(c-b) then floor(c)-floor(c-b) end d
  from (select *,sum(b)over(order by a desc rows between unbounded preceding and current row) c
          from a)b
...
Рейтинг: 0 / 0
24.09.2018, 14:55
    #39707084
Focha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSQL зависимость расчета от предыдущей строки
iiyamaFocha,
Немного офф,
Смешанные ощущения, вроде вы не новичек и писать Вам про скрипты создания и заполнения данными-лишнее с другой стороны ни того ни даже версии сервера не видно, чуднО

А по теме- нарастающий итог давно считается без курсоров, посмотреть "предыдущее" значение с явным определенным порядком тоже не проблема

Версия:
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4297.0 (X64)
...
Рейтинг: 0 / 0
24.09.2018, 15:00
    #39707092
Focha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSQL зависимость расчета от предыдущей строки
ПосетительFocha,

Код: sql
1.
2.
3.
4.
5.
6.
with a as
    (select * from(values(201908,0.298645),(201907,0.395862),(201906,0.496441),(201905,0.594498),(201904,0.613721),(201903,0.72629)
                        ,(201902,0.819897),(201901,1.184565))a(a,b))
select *,case when floor(c)>floor(c-b) then floor(c)-floor(c-b) end d
  from (select *,sum(b)over(order by a desc rows between unbounded preceding and current row) c
          from a)b



Да, крутая штука, но увы я ранее не указал версию сервера, в моей версии 2008 это не работает
...
Рейтинг: 0 / 0
24.09.2018, 15:01
    #39707096
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSQL зависимость расчета от предыдущей строки
FochaПосетительFocha,

Код: sql
1.
2.
3.
4.
5.
6.
with a as
    (select * from(values(201908,0.298645),(201907,0.395862),(201906,0.496441),(201905,0.594498),(201904,0.613721),(201903,0.72629)
                        ,(201902,0.819897),(201901,1.184565))a(a,b))
select *,case when floor(c)>floor(c-b) then floor(c)-floor(c-b) end d
  from (select *,sum(b)over(order by a desc rows between unbounded preceding and current row) c
          from a)b




Да, крутая штука, но увы я ранее не указал версию сервера, в моей версии 2008 это не работает

Вы не знаете, как реализовать нарастающий итог в 2008?
...
Рейтинг: 0 / 0
24.09.2018, 15:01
    #39707097
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSQL зависимость расчета от предыдущей строки
FochaПосетительFocha,

Код: sql
1.
2.
3.
4.
5.
6.
with a as
    (select * from(values(201908,0.298645),(201907,0.395862),(201906,0.496441),(201905,0.594498),(201904,0.613721),(201903,0.72629)
                        ,(201902,0.819897),(201901,1.184565))a(a,b))
select *,case when floor(c)>floor(c-b) then floor(c)-floor(c-b) end d
  from (select *,sum(b)over(order by a desc rows between unbounded preceding and current row) c
          from a)b



Да, крутая штука, но увы я ранее не указал версию сервера, в моей версии 2008 это не работает
гугл - накопительный итог, даст варианты на любой sql
...
Рейтинг: 0 / 0
24.09.2018, 15:19
    #39707115
StarikNavy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSQL зависимость расчета от предыдущей строки
...
Рейтинг: 0 / 0
24.09.2018, 15:21
    #39707116
Focha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSQL зависимость расчета от предыдущей строки
ПосетительFocha,

Код: sql
1.
2.
3.
4.
5.
6.
with a as
    (select * from(values(201908,0.298645),(201907,0.395862),(201906,0.496441),(201905,0.594498),(201904,0.613721),(201903,0.72629)
                        ,(201902,0.819897),(201901,1.184565))a(a,b))
select *,case when floor(c)>floor(c-b) then floor(c)-floor(c-b) end d
  from (select *,sum(b)over(order by a desc rows between unbounded preceding and current row) c
          from a)b


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


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