簡體   English   中英

MySQL查詢根據前N行的值選擇一行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM