SQL Server: средние значения за период, показывающие одинаковые значения для всех групп - PullRequest
0 голосов
/ 08 мая 2019

Из данных об использовании клиентов я хочу получить данные об использовании за прошедшую неделю и средненедельные значения за последние 52 недели, сгруппированные по идентификатору клиента.Попробуйте следующее, но получите одинаковые значения для сумм и средних значений для всех идентификаторов клиентов:

declare @refdate date = '2019-05-06'

;with cte as (
select clientID, useCount, useDate from usageData where datediff(week, useDate, @refdate) <=52

)

select clientID,
    (select sum(useCount) from cte where datediff(week, useDate, @refdate) <= 1 and clientID=cte.clientID) as sumover1week,
    (select sum(useCount)/52 from cte where datediff(week, useDate, @refdate) <= 52 and clientID=cte.clientID) as avgover52weeks
    from cte 
    group by clientID 

Спасибо

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Один из способов - удалить подзапросы и использовать регистр, чтобы отфильтровать более старые результаты для sumover1week:

select 
    clientID
    ,sum(useCount*case when datediff(week, useDate, @refdate) <= 1 then 1 else 0 end)  as sumover1week,
    ,sum(useCount)/52  as avgover52weeks
from cte 
group by clientID 
1 голос
/ 08 мая 2019

Используйте JOIN и подзапросы для извлечения ваших данных, сгруппируйте каждый подзапрос по clientID.Объедините их вместе по clientIDs и получите свои результаты.Используйте LEFT JOIN, если вы хотите видеть тех, у кого был какой-либо вклад в прошлом году, или используйте JOIN, если вы просто хотите, чтобы те, кто пользовался на прошлой неделе.

SELECT y.clientID, ISNULL(w.useCount, 0) as WeeklyCount, y.useCount/52 as YearlyAverage
FROM (
    SELECT clientID, SUM(useCount) as useCount
    FROM usageData 
    WHERE DATEDIFF(week, useDate, @refdate) <= 52
    GROUP BY clientID
) as y
LEFT JOIN (
    SELECT clientID, SUM(useCount) as useCount
    FROM usageData 
    WHERE DATEDIFF(week, useDate, @refdate) <= 1
    GROUP BY clientID
) as w
   ON y.clientID = w.clientID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...