SQL 如何查询连续上涨 N 次的记录[通俗易懂]

SQL 如何查询连续上涨 N 次的记录[通俗易懂]用SQL如何查询连续上涨N次的记录? 这个问题用SQL来做很难! SQL的理论基础是无序集合,早期SQL也没有次序的概念,需要用JOIN造出次序,连续上涨这种问题就非常困难。后来在SQL2003标准…

SQL 如何查询连续上涨 N 次的记录

SQL如何查询连续上涨N次的记录?

这个问题用SQL来做很难!

SQL的理论基础是无序集合,早期SQL也没有次序的概念,需要用JOIN造出次序,连续上涨这种问题就非常困难。后来在SQL2003标准中加入了窗口函数,一定程度地缓解了这个问题,但解决连续上涨问题仍然并不轻松。

举个例子:查询连续n天上涨的股票,现有数据库表stock数据如下:

code stockdate close
000062 2015-01-05 8.91
000062 2015-01-06 8.31
000062 2015-01-07 7.6
000062 2015-01-08 7.93
000062 2015-01-09 7.72

如果查询连续3天上涨的股票,用SQL写出来是这样:

WITH A AS

       (SELECT CODE,STOCKDATE,(CLOSE-LAG(CLOSE) OVER (PARTITION BY CODE ORDER BY STOCKDATE) )CLOSE_UP FROM STOCK),

B AS

       (SELECT CODE,

              CASE WHEN CLOSE_UP>0 AND

                     LAG(CLOSE_UP) OVER (PARTITION BY CODE ORDER BY STOCKDATE)>0 AND

                     LAG(CLOSE_UP,2) OVER (PARTITION BY CODE ORDER BY STOCKDATE)>0

                     THEN 1 ELSE 0 END UPDAYS3 FROM A)

SELECT DISTINCT CODE FROM B WHERE UPDAYS3=1

这里把3天写死进去了,要查询连续5天就会更复杂, n天就不知道怎么写。

 

对于这种有序的运算,如果使用集算器的SPL语言就会简单很多,只需2行代码:

  A
1 =connect(“mydb”).query(“select   * from stock order by code, stockdate”).group@o(code)
2 =A1.select((a=0,~.pselect((a=if(close>close[-1],a+1,0))>=5))>0).(code)

如果要查询n天,只要把A2中的5改成n即可。

 

SPL基于有序集合实现,对有序计算的支持比较彻底,能清楚表述集合中任意位置的记录,通过绝对/相对位置定位,很容易计算股票每日涨跌。

有序集合除了定位计算,还有非常规迭代聚合、有序循环、有序排名等多种计算手段,参考c.raqsoft.com.cn/article/1557384887803 c.raqsoft.com.cn/article/1557819034958,这些技术对简化计算编程很有帮助。

集算器 SPL 是解决 SQL 难题的专业脚本语言,它语法简单,符合自然思维,是天然分步、层次清晰的面向过程计算语言。它采用与数据库无关的统一语法,编写的算法可在数据库间无缝迁移。它是桌面级计算工具,即装即用,配置简单,调试功能完善,可设置断点、单步执行,每步执行结果都可查看。请参阅SQL 解题手

SPL也能很方便地嵌入到JAVA应用,可参考Java 如何调用 SPL 脚本》

具体使用方法可参考 《如何使用集算器》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8163.html

(0)
上一篇 2023-03-06
下一篇 2023-03-06

相关推荐

  • 基于逻辑规则的图谱推理题_逻辑思维图形推理

    基于逻辑规则的图谱推理题_逻辑思维图形推理导读: 近年来,知识图谱在众多行业场景被大量应用,例如推荐、医疗。为了构造尽可能完备的图谱,知识图谱的推理工作也成为学术届和工业界的一个重要研究课题。来自Mila人工智能实验室的瞿锰博士,给大家分享了

    2023-05-14
    150
  • 基于PyCharm和Jupyter的Python开发

    基于PyCharm和Jupyter的Python开发Python是一种高级的、面向对象的解释型编程语言,在数据科学、机器学习、Web开发、游戏开发等诸多领域都有广泛的应用。Python的简单易学、高效性、可读性等特点使其成为了一种非常流行的编程语言。而PyCharm和Jupyter则是Python中常用的两个开发环境,其中PyCharm是一款专业的Python集成开发环境,Jupyter则是一种Web应用,可以创建和共享文档,其中包括实时代码、方程式、可视化图表等。

    2024-08-05
    33
  • oracle存储过程异常怎么捕捉_查询oracle数据库状态

    oracle存储过程异常怎么捕捉_查询oracle数据库状态监控相关 数据库空间占用 SELECT pg_database.datname, pg_size_pretty ( pg_database_size ( pg_database.datname ) …

    2023-01-29
    148
  • 通过PLSQL Developer创建Database link,DBMS_Job,Procedure,实现Oracle跨库传输数据

    通过PLSQL Developer创建Database link,DBMS_Job,Procedure,实现Oracle跨库传输数据前一阵领导安排了一个任务:定时将集团数据库某表的数据同步至我们公司服务器的数据库,感觉比写增删改查SQL有趣,特意记录下来,希望能帮到有类似需求的小伙伴,如有错误也希望各位不吝指教 环境描述: 集团数

    2023-03-17
    156
  • 数据库事务的隔离级别[通俗易懂]

    数据库事务的隔离级别[通俗易懂] 数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事务的并发…

    2023-03-21
    147
  • Python实现Excel合并单元格功能

    Python实现Excel合并单元格功能Excel是日常工作和生活中必不可少的办公软件之一,其中合并单元格功能的应用非常广泛。在一些特定的场景下,将若干单元格合并成一个单元格能够提高Excel的美观程度和数据可读性,更方便人们的理解和使用。

    2024-09-21
    13
  • mysql安全管理免费PPT_MySQL 修改密码

    mysql安全管理免费PPT_MySQL 修改密码数据库服务器通常包含关键的数据,确保这些数据的安全和完整需要利用访问控制。一、访问控制MySQL服务器的安全基础:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少。访问控制:你需要给用户提供

    2023-01-24
    143
  • 使用f.readlines读取文件内容

    使用f.readlines读取文件内容codef.readlines()/code是Python中用于读取文件内容的方法之一。它可以一次性读取整个文件,并将文件内容存储到一个列表中,其中每一行对应着列表中的一个元素。这个方法通常用于读取小文件,而在读取大文件时,使用迭代器的方式更为高效。

    2024-03-06
    91

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注