[英]Retrieve previous row to subtract from current row by date
我有一个只有2个字段的表: NAV_Date
和NetAssetValue
。
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.