簡體   English   中英

3個月滾動平均值

[英]3 Month Rolling Average

我需要一些幫助,從下面的兩個數據集中計算出3個月的平均滾動費用。 這是數據集1 /數據集2的3個月平均值。我不確定使用cte是否是正確的路由。 任何見解均表示贊賞。

  Dataset 1:

        SELECT(factAdmissions.ContractCode + '-' +factAdmissions.BenefitPlanCode) AS [Contract Code],
        factAdmissions.AdmitCCYYMM,
        ISNULL(sum(AmountPaid),0)As [Amount Paid]
        FROM factAdmissions

        WHERE factAdmissions.AdmitCCYYMM >='200701'
        AND factAdmissions.AcuteSNFIndAdmit ='a'
        AND factAdmissions.ContractCode Is Not Null
        AND factAdmissions.BenefitPlanCode Is Not Null
        AND BusinessUnitCode In('EP','HF', 'VN')
        AND AdmitCCYYMM BETWEEN (@StartDate) AND (@EndDate)

        AND factAdmissions.ContractCode + '-' +factAdmissions.BenefitPlanCode IN (@Product)

        Group by factAdmissions.ContractCode,
        factAdmissions.BenefitPlanCode,
        factAdmissions.AdmitCCYYMM
        Order by factAdmissions.ContractCode,
        factAdmissions.BenefitPlanCode,
        factAdmissions.AdmitCCYYMM;



        Dataset2:

        Select

        (factMembership.ContractCode+'-'+ factMembership.BenefitPlanCode) As Product,
        EffectiveCCYYMM,
        ISNULL(count(Distinct MemberId),0) As MemberCount
        From factMembership
        Where EffectiveCCYYMM >= '200701'
        AND BusinessUnitCode In('EP','HF', 'VN')
        AND EffectiveCCYYMM BETWEEN (@StartDate) AND (@EndDate)

        AND factMembership.ContractCode + '-' +factMembership.BenefitPlanCode IN (@Product)


        Group by
        ContractCode,
        BenefitPlanCode,
        EffectiveCCYYMM

        Order by 1; 

    Dataset 1: Output 201101 201102 201103
    Cost $420,627 $73,608 $93,792 


    Dataset 2:Output 201103
    Memberscount 400



    Desired Output: 201103 
    3 Month Rolling Average $490.02 
DECLARE @Admission TABLE (
    Code VARCHAR(100),
    YearMonth CHAR(6),
    TotalPaid DECIMAL
)

DECLARE @Membership TABLE (
    Code VARCHAR(100),
    YearMonth CHAR(6),
    TotalMembers int
)

INSERT @Admission (Code, YearMonth, TotalPaid) VALUES 
('123', '201301', 10),
('xyz', '201301', 20),
('123', '201302', 15),
('xyz', '201302', 15),
('123', '201303', 30),
('xyz', '201303', 40),
('123', '201304', 30),
('xyz', '201304', 40),
('123', '201305', 15),
('xyz', '201305', 15),
('123', '201306', 20),
('xyz', '201306', 10)

INSERT @Membership (Code, YearMonth, TotalMembers) VALUES 
('123', '201301', 1),
('xyz', '201301', 2),
('123', '201302', 1),
('xyz', '201302', 3),
('123', '201303', 3),
('xyz', '201303', 5),
('123', '201304', 3),
('xyz', '201304', 5),
('123', '201305', 1),
('xyz', '201305', 3),
('123', '201306', 1),
('xyz', '201306', 2)


SELECT 
    a.Code,
    a.YearMonth,
    TotalPaid,
    TotalMembers,
    TotalPaid / CAST(TotalMembers AS FLOAT) CostPerMember,
    CAST(a.YearMonth + '01' AS date) AS ProperDate
INTO #Values
FROM @Admission a
    INNER JOIN @Membership m ON a.Code = m.Code AND a.YearMonth = m.YearMonth

SELECT
    main.Code,
    main.YearMonth,
    main.TotalPaid,
    main.TotalMembers,
    COUNT(*) AS PointsToAverage,
    SUM(sub.TotalPaid) AS TotalPaidOverPeriod,
    SUM(sub.TotalMembers) AS TotalMembersOverPeriod,
    SUM(sub.CostPerMember) AS TotalCostPerMemberOverPeriod,
    ROUND(SUM(sub.TotalPaid) / CAST(COUNT(*) AS FLOAT), 2) AS RollingAverageTotalPaid,
    ROUND(SUM(sub.TotalMembers) / CAST(COUNT(*) AS FLOAT), 2) AS RollingAverageTotalMembers,
    ROUND(SUM(sub.CostPerMember) / CAST(COUNT(*) AS FLOAT), 2) AS RollingAverageCostPerMember
FROM
    #Values main
    INNER JOIN #Values sub ON main.Code = sub.Code
        AND sub.ProperDate BETWEEN DATEADD(month, -2.9, main.ProperDate) AND main.ProperDate
GROUP BY
    main.Code,
    main.YearMonth,
    main.TotalPaid,
    main.TotalMembers

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM