MySQL 查询将值与前一行的值进行比较

2024-03-06

我一直在寻找,但一直无法找到解决方案——我知道这是可行的,但我只是还没有我需要的忍者 SQL 技能......

我正在寻找此问题的解决方案:我有两个与股市数据相关的表。第一个是带有 ID 和股票代码 (ID,SYMBOL) 的简单股票代码列表。第二个表包含每只股票的历史价格数据。 (ID、日期、开盘价、最高价、最低价、收盘价、交易量)。

我正在尝试找出如何查询最近收盘价高于 5 个交易日前收盘价的股票。我不能只做日期数学,因为股票不会每天交易(周末和节假日不交易,而且有些股票可能不会在正常交易日交易)。因此,我只需要比较每个交易品种的最近一行和第五行的收盘价。

我这里有示例表和数据:http://sqlfiddle.com/#!2/5fe76/2 http://sqlfiddle.com/#!2/5fe76/2

CREATE TABLE `STOCKS` (
  `ID` int,
  `SYMBOL` varchar(10)
);

INSERT INTO `STOCKS` (`ID`,`SYMBOL`)
VALUES
  (1, 'AA'),
  (2, 'ADT'),
  (3, 'AEO'),
  (4, 'AFA');

CREATE TABLE `PRICES` (
    `ID` int,
    `DATE` date,
    `OPEN` decimal(6,2),
    `HIGH` decimal(6,2),
    `LOW` decimal(6,2),
    `CLOSE` decimal(6,2),
    `VOLUME` bigint
  );

INSERT INTO `PRICES` (`ID`,`DATE`,`OPEN`,`HIGH`,`LOW`,`CLOSE`,`VOLUME`) VALUES
(1, '2014-11-06',   16.37,  16.42,  16.15,  16.37,  14200400),
(1, '2014-11-05',   16.68,  16.69,  16.17,  16.26,  18198200),
(1, '2014-11-04',   16.85,  16.87,  16.43,  16.56,  13182800),
(1, '2014-11-03',   16.78,  17.03,  16.65,  16.93,  15938500),
(1, '2014-10-31',   16.43,  16.76,  16.24,  16.76,  18618300),
(1, '2014-10-30',   16.17,  16.36,  15.83,  16.22,  17854400),
(1, '2014-10-29',   16.58,  16.70,  16.05,  16.27,  31173000),
(1, '2014-10-28',   16.5,   16.65,  16.41,  16.60,  12305900),
(1, '2014-10-27',   16.56,  16.57,  16.31,  16.38,  15452900),
(1, '2014-10-24',   16.33,  16.57,  16.22,  16.55,  12840200),

(2, '2014-11-06',   35.9,   36.12,  35.75,  36.07,  1018100),
(2, '2014-11-05',   35.68,  35.99,  35.37,  35.96,  1101500),
(2, '2014-11-04',   35.13,  35.69,  35.02,  35.49,  819100),
(2, '2014-11-03',   35.81,  35.99,  35.27,  35.32,  1304500),
(2, '2014-10-31',   35.79,  35.86,  35.46,  35.84,  1319400),
(2, '2014-10-30',   34.7,   35.34,  34.66,  35.19,  1201800),
(2, '2014-10-29',   35.06,  35.56,  34.5,   34.92,  1359000),
(2, '2014-10-28',   34.32,  35.17,  34.15,  35.07,  1301800),
(2, '2014-10-27',   34.2,   34.2,   33.66,  34.1,   662600),
(2, '2014-10-24',   34.02,  34.54,  33.95,  34.5,   750600),

(3, '2014-11-06',   13.27,  13.92,  13.25,  13.82,  6518000),
(3, '2014-11-05',   12.95,  13.27,  12.74,  13.22,  8716700),
(3, '2014-11-04',   12.85,  12.94,  12.65,  12.89,  4541200),
(3, '2014-11-03',   12.91,  13.12,  12.73,  12.89,  4299100),
(3, '2014-10-31',   13.2,   13.23,  12.83,  12.87,  7274700),
(3, '2014-10-30',   12.83,  12.91,  12.68,  12.86,  4444300),
(3, '2014-10-29',   13.02,  13.20,  12.79,  12.91,  2974900),
(3, '2014-10-28',   12.87,  13.10,  12.52,  13.04,  7365600),
(3, '2014-10-27',   12.84,  13.00,  12.67,  12.92,  6647900),
(3, '2014-10-24',   13.26,  13.29,  12.60,  12.92,  12803300),

(4, '2014-11-06',   24.59,  24.59,  24.49,  24.55,  20400),
(4, '2014-11-05',   24.81,  24.9,   24.81,  24.88,  11800),
(4, '2014-11-04',   24.87,  24.88,  24.76,  24.88,  10600),
(4, '2014-11-03',   24.85,  24.88,  24.76,  24.81,  18100),
(4, '2014-10-31',   24.82,  24.85,  24.77,  24.78,  8100),
(4, '2014-10-30',   24.83,  24.87,  24.74,  24.79,  13900),
(4, '2014-10-29',   24.86,  24.86,  24.78,  24.81,  5500),
(4, '2014-10-28',   24.85,  24.85,  24.80,  24.84,  10600),
(4, '2014-10-27',   24.68,  24.85,  24.68,  24.85,  7700),
(4, '2014-10-24',   24.67,  24.82,  24.59,  24.82,  9300);

查询的伪代码如下所示: “查找最近收盘价大于 5 个交易日之前收盘价的交易品种”

我想要创建的查询应产生以下结果:

Date        Symbol   Close   Close(-5)
2014-11-06  AA       16.37   16.22
2014-11-06  ADT      36.07   35.19
2014-11-06  AEO      13.82   12.86

(符号“AFA”将不匹配,因为它最近的收盘价是 24.55,而之前的 5 行是 24.75)


您可以使用相关子查询获取 5 天前的价格。事实上,您也可以通过同样的方式获取最新的价格。所以,这可能是正确的道路:

  select s.*,
         (select p.close
          from prices p
          where p.id = s.id
          order by date desc
          limit 1
         ) as Close,
         (select p.close
          from prices p
          where p.id = s.id and p.date <= date(now()) - interval 5 day
          order by date desc
          limit 1
         ) as Close_5
  from stocks s
  having Close > Close_5;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 查询将值与前一行的值进行比较 的相关文章

  • MySQL 客户端和服务器无法通信,因为它们不具备通用算法

    我在 AWS 服务器上运行以下代码 尝试连接到 AWS 提供的 mysql 服务 String conn buildConnString dc MySqlConnection connection new MySqlConnection c
  • H2 中的 IF 函数用于 MySQL 兼容性

    我正在使用 H2 具有 MySQL 兼容模式 针对我们使用 MySQL 的软件编写一些自动化测试 不幸的是 H2 似乎没有IF我们的许多查询都使用该函数 除了使用 DECODE 之类的东西重写我们的应用程序查询之外 它们是创建 if 函数
  • MySQL:通过迭代并与另一行连接来更新表中的行

    我有一张表纸 CREATE TABLE papers id int 11 NOT NULL AUTO INCREMENT title varchar 1000 CHARACTER SET utf8 COLLATE utf8 unicode
  • .NET、C#、LINQ、SQL 和 OR 映射 - 我只是不明白:(

    我只是不明白 我什至不确定我是否在寻找正确的方向 问题 这就是我的 C 应用程序 我通过 SSH 连接到在线 MySQL 数据库 现在我可以使用 MySQL Connector Net 驱动程序 http dev mysql com dow
  • 如何更改 max_allowed_pa​​cket 大小

    我的 MySQL 数据库中的 BLOB 字段出现问题 上传大于约 1MB 的文件时出现错误Packets larger than max allowed packet are not allowed 这是我尝试过的 在 MySQL 查询浏览
  • 如何在MySQL中使用数字字符串的比较运算符?

    我有一个员工表 有类似领域的经验VARCHAR类型 此字段结合了用短划线 分隔的总年份和总月份 因此我必须按年份过滤具有 3 年以上经验的经验 我的表结构 所以现在我必须获得3年以上经验的id 我尝试如下 SELECT FROM emplo
  • 如何使用 zend paginate 而不加载数据库的所有结果

    所以我认为 zend paginate 工作的方式是 paginator Zend Paginator factory results paginator gt setItemCountPerPage itemCount paginator
  • 创建前判断MySQL表索引是否存在

    我们系统的自动数据库迁移过程涉及运行包含新表定义及其附带索引的 sql 脚本 仅当这些表和索引尚不存在时 我才需要能够创建它们 表是通过使用 IF NOT EXISTS 来处理的 但创建索引时不存在这样的语法 我尝试编写一个存储过程 如下所
  • 当 mysql_connect 不适用于 IIS 上的 PHP 时,不会返回任何错误消息

    我是 PHP 和 MySQL 的新手 最近在已经运行 IIS v6 的 Windows Server 2003 服务器上安装了 PHP v5 3 10 和 MySQL v 5 5 21 PHP 运行 我已经从 MySQL 5 5 命令行客户
  • Opencart 2.2.0 启用按制造商搜索

    我正在使用 OC 2 2 0 并一直在努力解决以下问题 示例 我在标题搜索中输入西门子 然后单击 显示所有结果 我的搜索页面将显示所有结果 问题是 结果列表仅包含名称中包含西门子的产品 我需要的是展示all 搜索结果列表中属于该制造商的产品
  • MySQL 错误:无法创建表(errno:121“写入或更新时重复键”)

    我使用 MySQL Workbench 生成数据库的图表和代码 当我将代码放入 phpMyAdmin 时 它显示错误 1005 无法创建表wypozyczalnia wypozyczenie 错误号 121 写入或更新时密钥重复 哪里有问题
  • PHP mysql 土耳其语字符编码及比较

    我正在尝试通过 AJAX POST 从 MySql 数据库中过滤土耳其语姓名 英文字母单词列出一切正常 但是如果我发送 这是带点的字母 O 结果不仅是 还包括 O 和 另外我注意到 AJAX 帖子被发送 作为 C3 96 有人可以帮忙吗 请
  • 调用不同 SELECT 语句的 MySQL IF/CASE 语法

    我在使用 MySQL 时遇到问题IF or CASE syntax 程序是这样的 我有一个调用 MySQL 查询的 PHP 项目 假设 PHP 传递变量X If X is not 0那么它应该执行如下查询 SELECT FROM table
  • 如何设置 MySQL Workbench 自动断开与服务器的连接?

    有没有办法设置Workbench在空闲时自动与服务器断开连接 命令行 mysql 客户端在空闲时断开连接 然后在运行查询时重新连接 我也希望 Workbench 自动断开连接 我无法修改服务器的超时设置 但命令行客户端可以按照当前服务器设置
  • 如何提取 MySQL 日期中的月份和年份并进行比较?

    如何从 mySQL 日期中提取月份和日期并将其与另一个日期进行比较 我找到了 this MONTH 但它只获取月份 我寻找月份和年份 在Mysql Doku中 http dev mysql com doc refman 5 5 en dat
  • 如何提高MySQL INSERT和UPDATE性能?

    我们数据库中的 INSERT 和 UPDATE 语句的性能似乎正在下降 并导致我们的 Web 应用程序性能不佳 表是InnoDB 应用程序使用事务 我可以做一些简单的调整来加快速度吗 我认为我们可能会遇到一些锁定问题 我怎样才能找到答案 你
  • R,闪亮,应用程序之前的弹出窗口

    我正在开发一个闪亮的应用程序 它可以在启动时访问 MySQL 服务器并从中提取大量数据 这些数据稍后会在使用应用程序期间被过滤 由于传输的数据量相当大 第一个查询需要花费很多时间 这就是为什么我想创建一个对话框 弹出窗口或类似的东西 在应用
  • Mysql 按特定字符串排序

    我似乎找不到这个问题的答案 假设我有一个像这样的表 ID Name 1 AAAAAAAAA 2 ABAAAAAAA 3 BBAAAAAAA 4 CDAAAAAAA 5 BBAAAAAAA 有什么办法可以通过以下方式订购name 但是 从说开
  • 如何在 WHERE 子句中最佳地使用 COALESCE() ?

    这是我的查询 select coalesce qa2 subject qa subject as question subject qa body select count from viewed items vi where coales
  • MySQL 连接丢失:系统错误:110

    我正在尝试通过专用服务器上的 localhost 连接到 mySQL 服务器 但我不断收到错误 Lost connection to MySQL server at reading initial communication packet

随机推荐

  • 在 MongoDB 全文搜索中搜索特定字段中的值

    MongoDB 全文搜索 你好 我已经在索引中放入了一些字段 这就是我可以搜索的方式搜索关键字 BasicDBObject search new BasicDBObject search search keyword BasicDBObje
  • Rails 如何对 Javascript 进行 Gzip 压缩? (赫罗库)

    我已经运行了 google page speed 它说我应该 Gzip 我的 javascript 文件 如何对我的 javascript 文件进行 gzip 压缩 如果有的话 我的网站托管在 heroku 上 您可以使用 jammit g
  • 在RaspberryPi上连接华为E3372

    我尝试使用华为 e3372 的 LTE 棒连接到互联网 我安装了 usb modeswitch ppp 和 wvdial modewswitch 工作正常 该设备安装在 dev ttyUSB0 上 我可以在其中发送 AT 命令 我想使用 w
  • 收到“此应用程序正在从后台线程修改自动布局引擎”错误?

    在我的 OS X 中使用 swift 经常遇到这个错误 此应用程序正在从后台线程修改自动布局引擎 这可能会导致引擎损坏和奇怪的崩溃 这将在未来的版本中导致异常 我有一个我的NSWindow我正在交换观点contentView窗户的 我得到了
  • 当鼠标悬停时,Chartjs 显示标签和单位统计

    当我的鼠标指针悬停在图表上时是否可以显示标签和单位 目前只有数字 对于下面的例子 我想展示 58 标签1 0 标签2 0 标签3 0 标签4 0 标签5 我的选项如下所示 var options Boolean Show a backdro
  • 如何在 Java 代理中包含自行创建的 Java 文件

    In IBM Notes if I create a Java Agent how do I then include my own created java files 所以我创建了一个 cxmlCustom 包 我想将其包含在 prof
  • 如何在android中动态画线[重复]

    这个问题在这里已经有答案了 可能的重复 如何在android中画一条线 https stackoverflow com questions 3616676 how to draw a line in android 我必须匹配两个选项 就像
  • 通过膨胀布局创建自定义视图?

    我正在尝试创建一个自定义视图来替换我在多个地方使用的特定布局 但我正在努力做到这一点 基本上 我想替换这个
  • 带有 LaTeX 文本的参考文献

    在 LaTeX 中 您可以通过使用轻松引用某个部分 label 旁边的一个部分 然后 ref 创建参考 但是 参考文献仅包括节号或带有以下内容的页码 pageref 我想插入包含该部分文本的参考 Example section My Sec
  • 使用C#正则表达式删除HTML标签

    如何使用 C 正则表达式替换 删除所有 HTML 标记 包括尖括号 有人可以帮我解决代码吗 正如前面经常提到的 不应使用正则表达式来处理 XML 或 HTML 文档 它们在处理 HTML 和 XML 文档时表现不佳 因为无法以通用方式表达嵌
  • 相当于 VB.NET 中的 MoveNext

    由于 Recordset MoveNext 函数在 VB NET 中不再可用 在互联网上搜索了很多 我想要一种方法来解决我的问题 使用 MSSQL 刚刚在 SQLDATASET 不支持的地方看到 movenext 函数 我想使用类似于 Mo
  • 当我在线加载页面时,“web.config”文件出错

    我是 ASP NET 4 0 的新手开发人员 我开发了一个网站 它完全可以在我的本地系统中运行 但是现在我将所有文件上传到服务器 当我加载任何页面时 会出现错误网页配置 file 我的 Web Config 代码是这样的
  • Xcode 3.1.4 缺少代码签名权利选项?

    我使用的是 Xcode 3 1 4 并遇到了可怕的 可执行文件已使用无效权利签名 错误 我正在尝试在 BUILD 选项中添加 Entitlement plist 但我找不到放置它的位置 该选项曾经存在于 代码签名身份 之上 我认为它被称为
  • 用于网站流媒体的免费音频播放器

    我可以在我的网站中使用免费的音频播放器吗 它们可以定制吗 我听说过 Soundmanager 2 它是一个基于 Flash 的播放器 带有 JavaScript 前端 还有其他类似的免费播放器吗 如果您想要不需要加载 Flash 插件的东西
  • 何时以及为什么应该在 Scala 中使用 Applicative Functors

    我知道Monad在Scala中可以表示如下 trait Monad F def flatMap A B f A gt F B F A gt F B 我明白为什么它很有用了 例如 给定两个函数 getUserById userId Int O
  • 如何在 .NET 中表示一个非常大的整数?

    NET 是否提供了能够表示极大整数 例如 100 阶乘 的类 如果没有 有哪些好的第三方库可以实现这一点 NET 4 有一个大整数 http msdn microsoft com en us library system numerics
  • asp.net 添加 ApiController 作为依赖注入的服务

    你好 我走了本指南 http scottdorman github io 2016 03 17 integrating asp net core dependency injection in mvc 4 将 asp net core 依赖
  • 使用类先验优化输入图像

    我正在尝试实现谷歌博客条目的第一部分起始论 深入探讨神经网络 https research googleblog com 2015 06 inceptionism going deeper into neural html在 TensorF
  • 符号链接检查 - Linux Bash 脚本

    我正在尝试创建一个脚本来搜索目录以查找指向不存在对象的符号链接 我的目录中有一个文件 其中的符号链接已删除 但由于某种原因 当我运行下面的脚本时 它说文件存在 bin bash ls l 1 if d 1 then while read f
  • MySQL 查询将值与前一行的值进行比较

    我一直在寻找 但一直无法找到解决方案 我知道这是可行的 但我只是还没有我需要的忍者 SQL 技能 我正在寻找此问题的解决方案 我有两个与股市数据相关的表 第一个是带有 ID 和股票代码 ID SYMBOL 的简单股票代码列表 第二个表包含每