Sql 如何查询每个季度最后一个月的值?

Sql 如何查询每个季度最后一个月的值?,sql,sql-server,Sql,Sql Server,上面的查询返回每季度的值 我的问题是,如果我希望将该季度最后一个月的总资产值分配给该季度,如何更改它 对于第四季度3,总资产价值为总和(100+200+300)。但是我希望第三季度的值是300,这是该季度最后一个月的值 SELECT YEAR(aum.AUM_Timeperiod) as Year, DATEPART(q, aum.AUM_TimePeriod) AS Quarter, SUM(cast(aum.AUM_AssetValue AS mone

上面的查询返回每季度的值

我的问题是,如果我希望将该季度最后一个月的
总资产值
分配给该季度,如何更改它


对于第四季度3,总资产价值为总和(100+200+300)。但是我希望第三季度的值是300,这是该季度最后一个月的值

  SELECT YEAR(aum.AUM_Timeperiod) as Year,
         DATEPART(q, aum.AUM_TimePeriod) AS Quarter,
         SUM(cast(aum.AUM_AssetValue AS money)) as total_AssetValue
    FROM AssetUnderManagement as aum, 
         LineOfBusiness
   where aum.LOB_ID = LineOfBusiness.LOB_ID
     and LineOfBusiness.LOB_Name = 'Asset Management' 
GROUP BY YEAR(aum.AUM_Timeperiod), DATEPART(q, aum.AUM_TimePeriod);

下面是一个使用通用表表达式的版本:

SELECT
  Year,
  Quarter,
  (
    SELECT SUM(CAST(AUM_AssetValue AS MONEY)) 
      FROM AssetUnderManagement
     WHERE YEAR(AUM_Timeperiod) = i.Year
           AND MONTH(AUM_TimePeriod) = i.LastMonthInQuarter
  ) AS total_AssetValue
FROM
  (
  SELECT
    YEAR(aum.AUM_Timeperiod)        AS Year,
    DATEPART(q, aum.AUM_TimePeriod) AS Quarter,
    MAX(MONTH(aum.AUM_TimePeriod))  AS LastMonthInQuarter
  FROM
    AssetUnderManagement as aum, LineOfBusiness
  WHERE
    aum.LOB_ID = LineOfBusiness.LOB_ID
    AND LineOfBusiness.LOB_Name = 'Asset Management' 
  GROUP BY
    YEAR(aum.AUM_Timeperiod),
    DATEPART(q, aum.AUM_TimePeriod)
  ) AS i
您可以从上面使用相同的CTE,并使用以下查询来获得原始结果

WITH MyData AS
    (SELECT YEAR(aum.AUM_Timeperiod) AS [Year], DATEPART(q, aum.AUM_TimePeriod) AS [Quarter],
        DATEPART(M, aum.AUM_TimePeriod) AS [Month],
        DATEPART(M, aum.AUM_TimePeriod) - (DATEPART(q, aum.AUM_TimePeriod) - 1) * 3 AS [MonthInQtr],
        SUM(CAST(aum.AUM_AssetValue AS MONEY)) AS [total_AssetValue]
    FROM AssetUnderManagement AS aum, LineOfBusiness
    WHERE aum.LOB_ID = LineOfBusiness.LOB_ID
        AND LineOfBusiness.LOB_Name = 'Asset Management'
    GROUP BY YEAR(aum.AUM_Timeperiod), DATEPART(q, aum.AUM_TimePeriod),
        DATEPART(M, aum.AUM_TimePeriod), DATEPART(M, aum.AUM_TimePeriod) -
        (DATEPART(q, aum.AUM_TimePeriod) - 1) * 3
    )

SELECT [Year], [Quarter]
FROM MyData
WHERE MonthInQtr = 3
ORDER BY [Year], [Quarter], [total_AssetValue]
;

我们需要了解模式。AssetUnderManagement和Lineof Business有两个表,AssetUnderManagement的数据位于每月的Basisorry上,我们的多次编辑将其转换为社区wiki:(@Sravs:您是否收到错误消息或它是什么?另外,您的问题很模糊,您可能需要进一步澄清。我没有收到任何类型的错误,但上面查询的总资产值返回错误。对于一个示例四分之三,总资产值是sum(100+200+300)但是我希望第三节的值是300,这是第四节中最后一个月的值。上面的问题帮助了我,但我必须添加一些额外的where条件。谢谢你,托马拉克
SELECT [Year], [Quarter], SUM([total_AssetValue])
FROM MyData
GROUP BY [Year], [Quarter]
ORDER BY [Year], [Quarter]
;