5

以下のような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は2回価格を上げました トレーダーxyzは価格を上げ、価格を下げました

4

1 に答える 1

0

投稿でこの質問を別の方法で行っているようです: Compare rows in same table in mysql

それでも、上記の解決策は次のとおりです。

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

これが機能する理由の詳細は、他の質問の私の回答で確認できます。

お役に立てれば!

ジョン...

于 2012-11-06T05:16:42.580 に答える