您可以執行「自我連接」(將表連接到自身)以執行查詢。這裏棘手的部分是知道行被插入到表中的順序,並且只比較順序(時間上)相鄰的行。我假設你有某種TIMESTAMP列,它會告訴你在先前價格變化之後出現了哪些價格變化。如果不是,那麼也許「身份證」可以通知你(在較小的ID之後插入更大的ID行)。
呼喚你的表「選項卡」,使用「TRADER」提供的連接,並使用「ID」,以提供訂單,查詢將需要三路自加入這樣如下:
SELECT a.trader
, SUM(IF(a.price > b.price, 1, 0)) nbr_incr
, SUM(IF(a.price < b.price, 1, 0)) nbr_decr
, SUM(IF(a.price = b.price, 1, 0)) nbr_same
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
GROUP BY a.trader
上述查詢連接表以本身兩次,使得每個標籤代表以下:
- 選項卡:該更近的行進行比較
- 選項卡b:將之前即刻行進行比較的
- 標籤C:一個& b隨時間之間的行(不應該存在)
我們執行LEFT OUTER JOIN到「選項卡C」,因爲我們其實不願意該行存在。在where子句中,我們只將結果過濾到「選項卡c」行不存在的結果。
最後,查詢在交易者上執行'GROUP BY',SUM()通過比較'a'和'b'行的價格來獲得增量和減量。
這是一個有趣的挑戰。希望這可以幫助!
約翰。
是的,我很抱歉,我指的是行作爲列...能否請你幫我在如何做到這一點 – user1793864