SQL Server 2012:如何计算每月1号的季度平均值



假设我有以下表格:

CREATE TABLE Portfolio.DailyNAV
(
Date date NOT NULL,
NAV int NOT NULL,
)
GO

日期列为从"2015-02-02"开始的每日营业日,资产净值列为当天的总资产价值。我想要一个季度的平均资产净值。对于这个例子,让我们假设我想获得2016年第二季度的收益。我现在的代码是:

Select AVG(NAV) As AvgNAV
FROM Portfolio.DailyNAV
WHERE year(Date) = '2016' AND DATEPART(QUARTER,Date) = '2'
GO

我面临的问题是,这段代码计算该季度的每日平均值,但平均资产净值应该只使用该季度每月的第一个营业日期来计算。因此,对于2016年第二季度,平均资产净值应该是2016-04-01、2016-05-02(1号不是工作日)和2016-06-01的平均值。我不想简单地更改WHERE子句并使用这些日期,因为我想创建一个存储过程,用户可以通过输入年份和季度来获得平均资产净值。

谢谢。

应该可以:

WITH CTE AS
(
    SELECT  *,
            RN = ROW_NUMBER() OVER( PARTITION BY CONVERT(VARCHAR(6),[Date],112)
                                    ORDER BY [Date])
    FROM Portfolio.DailyNAV
    WHERE YEAR([Date]) = 2016 
    AND DATEPART(QUARTER,[Date]) = 2
    AND NAV IS NOT NULL
)
SELECT AVG(NAV) AvgNAV
FROM CTE
WHERE RN = 1;

最新更新