我有一个类似下面的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 :(得分: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
您可以在另一个问题的答案中查看其原因的详细信息。
希望这有帮助!
...约翰