SQL Server: от еженедельных сумм до средних еженедельных периодов - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть ежедневные производственные данные, которые я группирую в недельные данные следующим образом:

declare @rundate datetime = '2019-04-22'

select 
    convert(date, max (usedate)) as recorddate, 
    DATEDIFF(d, usedate, @rundate)/7 as weeks_ago, 
    sum(usecount) as usecountsum
from 
    usagetable
where 
    usedate <> @rundate and
    DATEDIFF(d, usedate, @rundate) >= 0 
group by 
    DATEDIFF(d, usedate, @rundate)/7
order by 
    weeks_ago asc 

Может ли кто-нибудь предложить эффективные способы получения другой таблицы сверху со следующими заголовками столбцов, которые не требуют пояснений:

recorddate  mostrecentweek      weeklyavglast4weeks weeklyavglast26weeks    weeklyavglast52weeks

Спасибо

1 Ответ

0 голосов
/ 26 апреля 2019

Вот то, с чем я наконец-то поехал:

declare @rundate datetime = '2019-04-22'

;with grp as (
select 
    convert(date, max (usedate)) as recorddate, 
    DATEDIFF(d, usedate, @rundate)/7 as weeks_ago, 
    sum(usecount) as usecountsum
from 
    usagetable
where 
    usedate <> @rundate and
    DATEDIFF(d, usedate, @rundate) >= 0 
group by 
    DATEDIFF(d, usedate, @rundate)/7
order by 
    weeks_ago asc )
select 
        usedate, 
        usecount as LastWk,  
        avg(usecount) OVER (ORDER BY usedate desc  ROWS BETWEEN 0 PRECEDING AND 3 FOLLOWING) as FourWkMA,
        avg(usecount) OVER (ORDER BY usedate desc  ROWS BETWEEN 0 PRECEDING AND 25 FOLLOWING) as TwentySixWkMA,
        avg(usecount) OVER (ORDER BY usedate desc ROWS BETWEEN 0 PRECEDING AND 51 FOLLOWING) as FiftyTwoWkMA
    from 
        grp
    order by 
        usedate desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...