在mysql中有解析这个问题的分析函数吗?

时间:2012-11-03 15:23:27

标签: 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提高价格并降低价格

1 个答案:

答案 0 :(得分:0)

我发现你在帖子Compare rows in same table in mysql

上以不同的方式提出了这个问题

尽管如此,这里有一个解决方案:(假设你的表名为'tab',ID实际上减少了,因此'lag'的意思是'之前',就像在你的示例数据中一样)

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

您可以在另一个问题的答案中查看其原因的详细信息。

希望这有帮助!

...约翰