我的表只包含 2 字段:NAV_Date
和NetAssetValue
。
NAV_Date
是一季度的最后天。
+----------+--------------+
|NAV_Date |NetAssetValue |
+----------+--------------+
|12/31/2012| $4,000|
+----------+--------------+
|03/31/2013| $5,000|
+----------+--------------+
我正在尝试编写一个减去前一个更新的查询。目前,我的查询只是选择表中的所有值。我知道要执行此操作我必须每次都检索先前的记录,但是我不知道该怎么做。
最终我将使用((CurrentValue
/ PreviousValue
) - 1)并将值存储为百分比以返回差异。
我也将按年度价值执行此操作。有没有人有一个例子,如果他们做了类似的事情或者可能是让我开始的线索?
我问的原因是因为我搜索了一个解决方案,但找不到任何有用的示例,其中没有自动编号或ID字段。
答案 0 :(得分:3)
您可以使用相关子查询来执行此操作:
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
答案 1 :(得分:0)
我认为你想要这样的东西,使用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列,通过查询计算出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 |
==============================================