繁体   English   中英

检索上一行以按日期从当前行中减去

[英]Retrieve previous row to subtract from current row by date

我有一个只有2个字段的表: NAV_DateNetAssetValue

NAV_Date是一个季度的最后一天。

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

我正在尝试编写一个减去前一个更新的查询。 目前,我的查询只是选择表中的所有值。 我知道要执行此操作我必须每次都检索先前的记录,但是我不知道该怎么做。

最终我将使用(( CurrentValue / PreviousValue ) - 1)并将值存储为百分比以返回差异。

我也将按年度价值执行此操作。 有没有人有一个例子,如果他们做了类似的事情或者可能是一条线索让我开始?

我问的原因是因为我搜索了一个解决方案但找不到任何有用的例子,其中没有自动编号或ID字段。

您可以使用相关子查询执行此操作:

select NAV_date, NAV_value, (NAV_value / prev_value) - 1
from (select t.*,
             (select top 1 NAV_value
              from YOURTABLENAMEGOESHERE as t2
              where t2.NAV_date < t.NAV_date
              order by t2.NAV_date desc
             ) as prev_value
      from YOURTABLENAMEGOESHERE as t
     ) as t

我想你想要这样的东西,使用MySQL变量。 此外,您似乎想要进行百分比变化计算,但您的公式是错误的。 如果没有,请告诉我,这可以根据您的需要进行调整:

SELECT
    nt.NAV_Date,
    nt.NetAssetValue,
    (@last_value := (SELECT NetAssetValue FROM NAV_Tbl WHERE NAV_Date < nt.NAV_Date ORDER BY NAV_Date DESC LIMIT 1)) AS last_value,
    IF(@last_value,(((nt.NetAssetValue - @last_value) / @last_value) * 100),NULL) AS percent_change
FROM
    NAV_Tbl nt,
    (SELECT
        @row_num:=0,
        @last_value:=0
    ) r
ORDER BY
    NAV_Date ASC

结果(2个左列是原始数据,2个右列是通过查询计算的):

==============================================
| date       | value | last_value | percent  |
==============================================
| 2012-10-01 | 3500  | NULL       | NULL     |
| 2013-01-01 | 4500  | 3500       | 28.5714  |
| 2013-04-01 | 1000  | 4500       | -77.7778 |
| 2013-07-01 | 2500  | 1000       | 150.0000 |
| 2013-10-01 | 9000  | 2500       | 260.0000 |
==============================================

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM