Как посчитать число в месяц, а затем посчитать его среднее в том же операторе выбора - PullRequest
1 голос
/ 22 июня 2019

Как рассчитать общее среднее значение за месяц в случае, как показано ниже:

У нас есть 9 идентификаторов заявок. поэтому Aveage будет 9/6 различных месяцев = 1,5

DECLARE @TestTable TABLE (claimid int, DateClosed datetime)

INSERT INTO @TestTable  
VALUES (111, '01-01-2018'), (222, '01-03-2018'), (333, '01-12-2018'),
       (444, '07-03-2018'), (555, '08-15-2018'), (666, '09-13-2018'),
       (777, '04-03-2019'), (888, '05-01-2019'), (999, '07-01-2018'),
       (1000, NULL), (1100, NULL), (1200, NULL)

SELECT 
    ClaimID,
    CAST(DateClosed AS DATE) AS DateClosed,
    COUNT(ClaimID) CountClaimID,
    COUNT(claimid) OVER (PARTITION BY MONT(DateClosed), YEAR(DateClosed)) AS CountPerMonth
FROM 
    @TestTable
GROUP BY 
    ClaimID, DateClosed

![enter image description here

1 Ответ

2 голосов
/ 22 июня 2019

Возможно что-то вроде этого

Пример

SELECT ClaimID
       ,cast(DateClosed AS date) AS DateClosed
       ,count(ClaimID) CountClaimID
       ,count(claimid) OVER ( PARTITION BY Month(DateClosed), year(DateClosed)) AS CountPerMonth
       ,case when DateClosed is null then 0 else count(DateClosed) over () / (select 0.0+count(distinct left(cast(DateClosed as date),7)) from @TestTable) end AS TotalAverage
FROM   @TestTable
GROUP  BY ClaimID,DateClosed

Возвращает

enter image description here

...