繁体   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