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 两次提高价格 贸易商 xyz 提高价格和降低价格

4

1 回答 1

0

我看到您在帖子中提出了不同的问题:Compare rows in same table in mysql

不过,这里有一个解决方案:(假设您的表称为“选项卡”,并且 ID 实际上减少了,因此“滞后”意味着“之前”,就像在您的示例数据中一样)

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 回答