powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / среднее скользящее и преобразование даты
3 сообщений из 3, страница 1 из 1
среднее скользящее и преобразование даты
    #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
среднее скользящее и преобразование даты
    #40116856
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayapple,

используйте аналитические функции
SUM() OVER() рассчитаете сумму по окну, COUNT() OVER() количество по окну.
...
Рейтинг: 0 / 0
среднее скользящее и преобразование даты
    #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
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / среднее скользящее и преобразование даты
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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