码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 计算每组的前 N 名


    【问题】

    需求:

    表 1 是股票发生大宗交易的股票代码、日期、大宗交易成交价格
    表 2 是各个股票的历史记录

    现在希望能够得到每个发生大宗交易的股票在这一天之后 3 天 (包括发生当天) 之内的价格记录

    表 1 如下:

    CodeDate1Price1  
    12014/3/125  
    22014/3/132  
    32014/3/133  
    

    表 2 如下:

    CodeDate2Price2  
    12014/3/104  
    12014/3/114.09  
    12014/3/124.01  
    12014/3/134.05  
    12014/3/144.10  
    12014/3/154.50  
    12014/3/164.45  
    22014/3/104  
    22014/3/114.09  
    22014/3/124.01  
    22014/3/134.05  
    22014/3/144.10  
    22014/3/154.50  
    22014/3/164.45  
    32014/3/104  
    32014/3/114.09  
    32014/3/124.01  
    32014/3/134.05  
    32014/3/144.10  
    32014/3/154.50  
    32014/3/164.45  
    32014/3/174.50
    

    得到的目标结果应该是:

    CodeDate1Price1Date2Price2  
    12014/3/1252014/3/124.01  
    12014/3/1252014/3/134.05  
    12014/3/1252014/3/144.10  
    22014/3/1322014/3/134.05  
    22014/3/1322014/3/144.10  
    22014/3/1322014/3/154.50  
    32014/3/1332014/3/134.05  
    32014/3/1332014/3/144.10  
    32014/3/1332014/3/154.50
    

    最基本的连接我会写,但是要怎么限定在大宗交易发生之后 3 个交易日的记录不知道要怎么去限定。而且,因为交易存在双休日,是不能通过限定日期的,必须通过判断记录数才行。
    求大神指导,跪谢!

    【回答】

    自然的思路是:关联两表后按 Code、Date1 和 Date2 排序,再按 Code 和 Date1 分组,取每组中 Date2 大于等于 Date1 的三条记录即可完成。但由于 SQL 分组后无法保存分组结果,而且 SQL 集合无序很难取出连续的三条记录。对于支持窗口函数的数据库实现要简单些:

    select*  
    from( select ROW_NUMBER() OVER( PARTITION by t1.code,t1.date1  ORDER BY t2.date2) rn,  
    t1.code,  
    t1.date1,  
    t1.price1,  
    t2.date2,  
    t2.price2  
     from t1  
     join t2  on t1.code = t2.code  
     where t2.date2 >= t1.date1) t  
     where rn <= 3
    

    这类有序计算使用 SPL 会更方便,有集合数据和按位置操作的功能,代码通用直观,也能适用于没有窗口函数的数据库:

    A
    1$(db1)select t1.code Code, t1.date1 Date1, t1.price1 Price1, t2.date2 Date2, t2.price2 Price2 from t0070_1 t1join t0070_2 t2 on t1.code = t2.code where t2.date2 >= t1.date1 order by t1.code,t1.date1,t2.date2
    2=A1.group(Code,Date1).(~.m([1,2,3]).select(~)).conj()

    关于更多 SPL 集合的使用,参考《SPL 中集合的使用》

     

  • 相关阅读:
    Inksape 设置画布像素尺寸及透明背景
    初级篇—第六章创建和管理表
    【SwiftUI模块】0060、SwiftUI基于Firebase搭建一个类似InstagramApp 2/7部分-搭建TabBar
    Windows控制台ssh连接Linux,并且保持连接不断开
    minio文件服务器-docker docker-compose 搭建部署以及使用大全
    AndroidStudio模拟器,没有Google Play的就有ROOT权限
    ConsulManager0.9.6 新增RDS云监控指标抓取与自建MySQL接入支持
    宠物行业如何进行私域获客转化
    货物寄到英国选择什么物流比较划算?
    阿里云服务器端口号设置
  • 原文地址:https://blog.csdn.net/raqsoft/article/details/126481140
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号