mysql 两条记录的位置_按条件查出两条记录后求其位置间隔

关键词导读:有序集合 记录位置 记录间隔

数据排序以后,按照查询条件找到需要的两条记录,然后算出这两条记录之间间隔了多少条记录。

用SQL来求这个解比较麻烦!

SQL的集合中没有记录顺序,不能提供记录的位置信息。SQL2003标准中加入了窗口函数,能够给记录添加行号了,解决这个问题就需要先添加行号,然后再用多次子查询定位计算。

举个例子:现有股票收盘价数据表STOCK数据如下,要求查出股票000062最后的最低收盘价和最后的最高收盘价之间相隔多少个交易日:

CODESTOCKDATECLOSE0000622019-01-028.110000622019-01-038.310000622019-01-048.76………0000622019-12-307.320000622019-12-317.12………

以Oracle为例,用SQL写出来是这样:

WITH T AS

(SELECT *, ROW_NUMBER() OVER (ORDER BY STOCKDATE) RN FROM STOCK WHERE CODE='000062'),

T1 AS (SELECT * FROM T WHERE CLOSE = ( SELECT MIN(CLOSE) FROM T )),

T2 AS (SELECT * FROM T WHERE CLOSE = ( SELECT MAX(CLOSE) FROM T )),

T3 AS (SELECT * FROM T1 WHERE RN = ( SELECT MAX(RN) FROM T1 )),

T4 AS (SELECT * FROM T2 WHERE RN = ( SELECT MAX(RN) FROM T2 ))

SELECT ABS(MAX(T3.RN)-MAX(T4.RN)) FROM T3, T4;

这个SQL子查询很多,可读性不太好。

如果用集算器的SPL语言来解决这个问题,就会简单很多,只需2行代码:

SPL语言支持有序集合对象,提供了返回记录在集合中位置的函数,所以解决这个问题的思路就非常自然,读者一看就明白了。

SPL 集合还提供了交、差、并运算,聚合运算,循环遍历运算,请阅《SPL教案 集合》、《SPL教案 有序》。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值