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