Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / среднее скользящее и преобразование даты / 3 сообщений из 3, страница 1 из 1
02.12.2021, 20:27
    #40116836
mayapple
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
среднее скользящее и преобразование даты
Всем привет.
Задача найти кол-во заказов за месяц, потом вычислить % относительно среднего скользящего за предыдущие 12 месяцев.
Для 01.2021 среднее это (сумма всех заказов с 01.2020 по 12.2020)/12
Для 02.2021 среднее это (сумма всех заказов с 02.2020 по 01.2021)/12
и т.д. для каждого следующего месяца

А потом вычислить отношение в %=(Кол-во заказов/Среднее)*100

Проблема вычислить среднее скользящее и не понятно как привести дату к виду в примере (поле Период), если поле "Дата заказа" в таблице вида:2019-08-05 09:46:10

Пример данных:
Период Кол-во заказов Среднее Процент
01.01.2020 9
01.02.2020 16
01.03.2020 23
01.04.2020 18
01.05.2020 13
01.06.2020 11
01.07.2020 17
01.08.2020 13
01.09.2020 26
01.10.2020 20
01.11.2020 12
01.12.2020 30
01.01.2021 15 17 87
01.02.2021 7 18 39
01.03.2021 18 17 105
01.04.2021 0 17 0
01.05.2021 15 15 99
01.06.2021 13 15 85
01.07.2021 14 16 90
01.08.2021 20 15 131
01.09.2021 22 16 139
01.10.2021 13 16 84
01.11.2021 16 15 107
01.12.2021 0 15 0


Спасибо за помощь.
...
Рейтинг: 0 / 0
02.12.2021, 22:05
    #40116856
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
среднее скользящее и преобразование даты
mayapple,

используйте аналитические функции
SUM() OVER() рассчитаете сумму по окну, COUNT() OVER() количество по окну.
...
Рейтинг: 0 / 0
02.12.2021, 22:06
    #40116858
godsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
среднее скользящее и преобразование даты
если брать самое простое
и не понятно как привести дату к виду в примере (поле Период), если поле "Дата заказа" в таблице вида:2019-08-05 09:46:10

cast ([Дата заказа] as date)

Проблема вычислить среднее скользящее
Код: 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.
33.
-- при условии, что все месяцы есть 
-- если в месяцах пропуски, используйте подзапрос или outer apply, где дата between dateadd (MM,-12,[Дата заказа]) and [Дата заказа]
declare @table table (
dat datetime,
ord int)
insert into @table
values  
 ('20200101',9  )
,('20200201',16 )
,('20200301',23 )
,('20200401',18 )
,('20200501',13 )
,('20200601',11 )
,('20200701',17 )
,('20200801',13 )
,('20200901',26 )
,('20201001',20 )
,('20201101',12 )
,('20201201',30 )
,('20210101',15 )
,('20210201',7  )
,('20210301',18 )
,('20210401',0  )
,('20210501',15 )
,('20210601',13 )
,('20210701',14 )
,('20210801',20 )
,('20210901',22 )
,('20211001',13 )
,('20211101',16 )
,('20211201',0  )

select t.*, (cast(isnull(sum(t.ord) over (order by t.dat rows between 11 preceding and current row ),0) as decimal(31,4))/12) as sum_12  from @table t
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / среднее скользящее и преобразование даты / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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