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

Откуда:
Сообщений: 4
Добрый день, подскажите пожалуйста, как сделать такое:
Есть выборка с данными о продажах, сумма за каждую неделю.

Данные такие

1 201847 2018-11-24 00:00:00.000 86445.29105300
2 201846 2018-11-17 00:00:00.000 84884.60365000
3 201845 2018-11-10 00:00:00.000 113753.04355800
4 201844 2018-11-03 00:00:00.000 91600.51662300
5 201843 2018-10-27 00:00:00.000 125485.59366200
6 201842 2018-10-20 00:00:00.000 121193.76589100
7 201841 2018-10-13 00:00:00.000 111237.67063200
8 201840 2018-10-06 00:00:00.000 119599.89593200

Нужна сумма за 52 недели.
Как это лучше всего реализовать? Пока придумал только сгруппировать по ROW_Number() по 52 и присвоить число, например первые 52 записи 1, вторые 52 2 и т.д. и потом сумировать через Partition. Как присвоить эти номерки?

Или я вообще велосипед изобретаю и есть решение получше? ))

select
row_number() over(order by data desc) as rownumber
,YEAR(data) * 100 + DATEPART(WEEK, data) AS [week]
 ,data,sum(saleseur) as saleseur
from Sales
group by [data]
28 ноя 18, 16:39    [21747626]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по неделям  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
Troinat,

для начала надо понять, какие недели вы имеете в виду.
Например, 1 января принадлежит какой неделе? И всегда ли одной и той же?
28 ноя 18, 17:03    [21747650]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по неделям  [new]
Troinat
Member

Откуда:
Сообщений: 4
iap, как правило недель в году 52, т.е. 1 января это будет 1 неделя. Разделяются они через datepart(week,data). Но по неделям уже разделено, т.е. в таблице 1 строка = 1 неделе. Нужно, чтобы при сортировке по уменьшению, для каждой строки суммировалась сумма последних 52 строк (включая текущую).
28 ноя 18, 17:10    [21747667]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по неделям  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
Troinat
, т.е. 1 января это будет 1 неделя. .

не факт ;) есть американская и наша системы
(гугл в помощь)
если не заморачиваться то просто группировать по
DATEPART(WEEK, [поле_даты]) 
28 ноя 18, 17:16    [21747678]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по неделям  [new]
Troinat
Member

Откуда:
Сообщений: 4
StarikNavy,
Это совсем не то, что нужно((
28 ноя 18, 17:23    [21747684]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по неделям  [new]
SerGrr1898
Member

Откуда:
Сообщений: 7
что-то типа того
select
sum(saleseur) over(order by data DESC ROWS BETWEEN CURRENT ROW AND 52 FOLLOWING ) saleseur
,[data]
from Sales
group by [data]
28 ноя 18, 17:54    [21747718]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по неделям  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
SerGrr1898
что-то типа того
select
sum(saleseur) over(order by data DESC ROWS BETWEEN CURRENT ROW AND 52 FOLLOWING ) saleseur
,[data]
from Sales
group by [data]

фантастика :)
28 ноя 18, 17:56    [21747723]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по неделям  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Troinat,

SUM + OVER + RANGE BETWEEN CURRENT ROW AND 52 FOLLOWING
28 ноя 18, 17:56    [21747724]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по неделям  [new]
Konst_One
Member

Откуда:
Сообщений: 11522
а если в одну из недель данных не будет?
28 ноя 18, 17:57    [21747728]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по неделям  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
WarAnt
Troinat,

SUM + OVER + RANGE BETWEEN CURRENT ROW AND 52 FOLLOWING

фантастика часть два :)
28 ноя 18, 17:58    [21747730]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по неделям  [new]
Troinat
Member

Откуда:
Сообщений: 4
SerGrr1898
что-то типа того
select
sum(saleseur) over(order by data DESC ROWS BETWEEN CURRENT ROW AND 52 FOLLOWING ) saleseur
,[data]
from Sales
group by [data]


Да! Только 51 FOLLOWING а не 52 :) Т.к если 52 то считает 53 недели. Спасибо большое!
28 ноя 18, 18:00    [21747736]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по неделям  [new]
SerGrr1898
Member

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

Как тут выше сказали, это будет корректно работать только если нет пропусков.
28 ноя 18, 18:06    [21747740]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по неделям  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
SerGrr1898,

т.е. в каждой строке будет какая-то сумма за следующие 52 недели, что совсем не то что просит ТС
28 ноя 18, 18:07    [21747744]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по неделям  [new]
SerGrr1898
Member

Откуда:
Сообщений: 7
TaPaK,
ну сортировку поменять, вроде, не проблема. Я скинул концепт)
28 ноя 18, 18:11    [21747752]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по неделям  [new]
SerGrr1898
Member

Откуда:
Сообщений: 7
TaPaK,
ну сортировку поменять, вроде, не проблема. Я скинул концепт)
28 ноя 18, 18:11    [21747753]     Ответить | Цитировать Сообщить модератору
 Re: Группировка по неделям  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
SerGrr1898
TaPaK,
ну сортировку поменять, вроде, не проблема. Я скинул концепт)

печально...
28 ноя 18, 18:11    [21747754]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить