【问题标题】:Subtract last year's ending quarter value from current quarter value从当前季度值中减去去年的结束季度值
【发布时间】:2014-01-21 20:41:30
【问题描述】:

我知道

(DateAdd("s",-1,
DateAdd("q",DateDiff("q","1/1/1900",
DateAdd("yyyy",-1,Date())),"1/1/1900")),
"Short Date") 

返回 1 年前一个季度的最后一天。

所有 NAV_Dates 都是每个季度的最后一天,并且有一个与之关联的值,这使得该行独一无二。 (收盘价为 NetAssetValue)

我如何使用它(或类似的东西)来获取与年末季度日期相关的值,然后从当前季度的结束值中减去它。注意:我不必使用它,它只是我所知道的唯一一个 SQL,它会返回一个接近我需要的值。

该表的值将类似于以下设置:

+----------+--------------+
|NAV_Date  |NetAssetValue |
+----------+--------------+
|12/31/2012|        $4,000|
+----------+--------------+
|03/31/2013|        $5,000|
+----------+--------------+

那么年初至今将是 (5,000/4,000) - 1 并保存为百分比。另一个例子是:

+----------+--------------+
|NAV_Date  |NetAssetValue |
+----------+--------------+
|12/31/2012|        $4,000|
+----------+--------------+
|06/30/2013|        $4,025|
+----------+--------------+

年初至今计算:(4,025/4,000) - 1 并保存为百分比。

我知道它涉及一个嵌套子查询(或者可能不止一个),我们基本上必须捕获当前季度末,使用该值,并捕获上一年的季度末并使用该值。只是不太清楚该怎么做。

【问题讨论】:

    标签: sql ms-access ms-access-2007


    【解决方案1】:

    考虑到相关子查询,您走在正确的轨道上。我认为您希望子查询为每个季度记录返回年末NetAssetValue。

    我希望这个查询中的WHERE 子句能够使逻辑清晰。但是,它会强制子查询对表中的每一行运行Year() 函数。即便如此,如果表足够小,您可能会对性能感到满意。

    SELECT
        y1.NAV_Date,
        y1.NetAssetValue,
        (
            SELECT TOP 1 y2.NetAssetValue
            FROM YourTable AS y2
            WHERE Year(y2.NAV_Date) = Year(y1.NAV_Date)
            ORDER BY y2.NAV_Date DESC
        ) AS YearEndValue
    FROM YourTable AS y1;
    

    我认为下面的WHERE 子句应该比上面的子句提供更好的性能,假设NAV_Date 被索引。但是,您可能会发现它不太直观。如果是这样,请尝试第一个版本,然后在需要时再处理这个版本:

        WHERE y2.NAV_Date <= DateSerial(Year(y1.NAV_Date), 12, 31)
    

    请注意,在本年度,查询将从最近的季度记录中返回 NetAssetValueYearEndValue,即使该年度尚未结束。我不知道在那种情况下你还想要什么。

    最后,查询应该为您提供每个季度的NetAssetValue 和YearEndValue。您剩下的就是添加使用这些值的计算。

    【讨论】:

    • 您的 SQL 检索当前的 YearEndValue,并且对于我的计算,我需要 上一年 年的结束季度值。照原样,我将当前的NetAssetValue 除以当年的期末资产净值,我实际上需要上一年的期末值。希望这会有所帮助。
    • 好的,我明白了。我刚刚在Year(y1.NAV_Date)之后添加了-1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多