[英]MySQL query to select a row based on values of Nth previous row
我第二次嘗試問這個問題,希望示例更簡單,我的問題更清楚...
我只想查詢最近交易價格高於其前N行價格的股票代碼(按日期排序,但是日期不是連續的)。 對於此示例,我們將N設置為5,因此將價格與之前5行的價格進行比較。
輸出應該是符號,最近日期,價格,n行價格,n行日期。
這是指向架構/數據的鏈接... http://sqlfiddle.com/#!2/bbb54/2
輸出應如下所示:
Symbol, Price, Date, Price5RowAgo, Date5RowsAgo
AA 16.37 2014-11-06 16.22 2014-10-11
ADT 36.07 2014-11-05 35.19 2014-10-23
AEO 13.82 2014-11-03 12.86 2014-10-07
(請注意,由於不符合AFA的規定,因此沒有結果)
如果閱讀了許多有關使用上一行值的問題/解決方案,但似乎還不太適應這些情況。 任何幫助和建議,不勝感激!
我想到的最好的方法是使用子查詢來獲取前幾行。 我嘗試將它們作為單個子查詢放置,但是當您將其添加為選擇列時,看起來無法為子查詢選擇多個列。 也許有人可以將兩者壓縮為一。
SELECT *,
(SELECT p2.`DATE` FROM PRICES as p2 WHERE p2.`SYMBOL`=p1.`SYMBOL` ORDER BY p2.`DATE` LIMIT 5,1) as previousDate,
(SELECT p2.`PRICE` FROM PRICES as p2 WHERE p2.`SYMBOL`=p1.`SYMBOL` ORDER BY p2.`DATE` LIMIT 5,1) as previousPrice
FROM PRICES as p1 GROUP BY p1.`SYMBOL`;
顯然,根據需要在子查詢中更改LIMIT 5,1
,以返回所需的行數。
謝謝@huykir! 經過一些小的修改,現在可以完美運行了。 這是最終版本...
SELECT *,
(SELECT p2.`DATE` FROM PRICES as p2 WHERE p2.`SYMBOL`=p1.`SYMBOL` ORDER BY p2.`DATE` DESC LIMIT 5,1) as previousDate,
(SELECT p2.`PRICE` FROM PRICES as p2 WHERE p2.`SYMBOL`=p1.`SYMBOL` ORDER BY p2.`DATE` DESC LIMIT 5,1) as previousPrice
FROM PRICES as p1
GROUP BY p1.`SYMBOL`
HAVING PRICE>PREVIOUSPRICE
ORDER BY p1.SYMBOL ASC, p1.DATE DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.