2012-11-03 36 views
5

我有一個MySQL表像下面解決這個問題是否有解析函數在mysql中?

id trader price 
111 abc 5 
222 xyz 5.20 
333 abc 5.70 
444 xyz 5 
555 abc 5.20 

我想有一個結果發現每個交易增加或減少價格 如下

id trader price lagged_price flag 
111 abc 5 
222 xyz 5.20 5   
333 abc 5.70 5.20  increased 
444 xyz 5  5.70  increased 
555 abc 5.20 5   reduced 
        5.20  increased 

lagged_price的次數是滯後於柱原列價格。我需要有一個標誌說,在特定時間的交易增加或在上述情況下價格 降低了最終的結果是

商ABC提高價格的兩倍 商XYZ價格上漲的人,降低價格的人

+0

有MySQL中沒有分析功能,所以沒有。儘管有這方面的方法。你似乎沒有落後於你描述的價格。這不是每個交易者都做的,而是整個結果集。這是故意的嗎? – Ben

+2

[模擬MySQL中的滯後函數]的可能重複(http://stackoverflow.com/questions/11303532/simulate-lag-function-in-mysql) –

+0

或http://stackoverflow.com/q/9894092/521799, http://stackoverflow.com/q/5483319/521799,...等 –

回答

0

我看到你在帖子中以不同的方式提出了這個問題:Compare rows in same table in mysql

不過,這裏是上述解決方案:(假設你的表被稱爲'tab',並且ID實際上減少了,所以'lag'的意思是'before '因爲它看起來像你的示例數據)

SELECT a.id, a.trader, a.price, b.price as lagged_price 
    , case when a.price > b.price then 'increased' 
      when a.price < b.price then 'decreased' 
      else 'same' 
     end as flag 
    FROM tab a 
    JOIN tab b 
    ON a.trader = b.trader AND a.id > b.id 
    LEFT OUTER JOIN tab c 
    ON a.trader = c.trader AND a.id > c.id AND b.id < c.id 
WHERE c.id IS NULL 

你可以在你的其他問題上看到爲什麼在我的回答中起作用的細節。

希望這會有所幫助!

約翰。

相關問題