2014-01-20 71 views
1

我有一個表只有字段:NAV_DateNetAssetValue檢索上一行以減去當前行的日期

NAV_Date最後一個季度的一天。

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

我正在嘗試編寫一個查詢,從上一個減去最近的。目前,我的查詢只是選擇表中的所有值。我知道要執行此操作,我必須每次都檢索先前的記錄,但是我不知道如何執行此操作。最終我會用((CurrentValue/PreviousValue) - 1)並將該值存儲爲百分比以返回差異。

我也會爲每年的值執行此操作。有沒有人有一個例子,如果他們做了類似的事情或者可能讓我開始的線索?

我問的原因是因爲我搜索了一個解決方案,但沒有找到任何有用的示例,其中沒有自動編號或ID字段。

回答

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 
+0

我用我的表名替換:「t」,用我的值字段賦值,用日期字段替換日期,是嗎? t2怎麼樣? (我仍然在努力學習SQL ......)謝謝! –

+0

我收到一個錯誤:在(選擇t。* ....)中缺少操作符prev_value –

+0

在Access SQL中,當您爲字段表達式生成別名時,必須包含「AS」。在此處添加:')AS YOURVALUEEGEGESHERE的prev_value ' – HansUp

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右列):

============================================== 
| 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 | 
============================================== 
+0

謝謝,我會給它一個鏡頭,讓你知道我的結果。 –

+0

好的,太好了。請記住,「季度」應該更改爲您的表名(保留所有的qs,或者一致地更改)。而且我假設你的列名是'value'和'date',如果他們是別的東西,他們需要相應地改變!如果您有任何問題,請告訴我。 – omgitsfletch

+0

我在這裏得到一個語法錯誤:SELECT NetAssetValue FROM NAV_Tbl WHERE date