我第二次尝试问这个问题,希望这个例子更简单,我的问题更清晰...MySQL查询选择基于前N行值的行
我只是想查询股票代码最近的价格大于其之前的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不是结果,因为它不符合条件)
如果读取有关使用前一行值的许多问题/解决方案,但似乎无法使其中的任何一个适用于此特定情况。任何帮助和建议非常感谢!
谢谢你这...这让我开始。我注意到,在2个子查询中,我们需要将“DESC”添加到order-by子句以获取正确的日期。您的查询会获得全部4个符号,而我需要的是将最近的价格与N天前的价格(本例中为5)进行比较。 'HAVING PRICE> previousPrice'条款是否可以实现这一目标?我尝试了sqlfiddle,但得到这个sql错误。 – Paul
经过一番修补,我想我已经得到它... – Paul
[code] 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价格为P1 GROUP BY p1.'SYMBOL' HAVING PRICE> PREVIOUSPRICE ORDER BY p1.SYMBOL ASC,p1.DATE DESC [代码] – Paul