码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 分组后比较组内数据


    【问题】

    Let’s say I have given data as string:

    I have two tables, one with the main data and a second table with historical values.

    Tablestocks

    +----------+-------+-------------+
    | stock_id | symbol| name | 
    +--------------------------------+ 
    | 1| AAPL | Apple |
    | 2| GOOG | Google |
    | 3| MSFT | Microsoft |
    +----------+-------+-----------+
    

    Tableprices

    +----------+-------+---------------------+
    | stock_id | price | date | 
    +----------------------------------------+ 
    | 1| 0.05| 2015-02-2401:00:00|
    | 2| 2.20| 2015-02-2401:00:00|
    | 1| 0.50| 2015-02-2323:00:00|
    | 2| 1.90| 2015-02-2323:00:00|
    | 3| 2.10| 2015-02-2323:00:00|
    | 1| 1.00| 2015-02-2319:00:00|
    | 2| 1.00| 2015-02-2319:00:00|
    +----------+-------+---------------------+
    

    I need a query that returns:

    +----------+-------+-----------+-------+
    | stock_id | symbol| name | diff | 
    +--------------------------------------+ 
    | 1| AAPL | Apple | -0.45|
    | 2| GOOG | Google | 0.30|
    | 3| MSFT | Microsoft | NULL|
    +----------+-------+-----------+-------+
    

    Where diff is the result of subtracting from the newest price of a stock the previous price. If one or less prices are present for a particular stock I should get NULL.

    I have the following queries that return the last price and the previous price but I don’t know how to join everything

    /\* last */
    SELECTprice
    FROMprices
    WHEREstock_id = '1'
    ORDERBYdate DESC
    LIMIT 1
    /\* previous */
    SELECTprice
    FROMprices
    WHEREstock_id = '1'
    ORDERBYdate DESC
    LIMIT 1,1
    

    【回答】

    这类组内有序计算需要引用“第 1 条”和“第 2 条”,用 SQL 表达起来非常麻烦。这种情况用 SPL 实现很简单,只需 2 行代码:

    A
    1$(db1)select s.stock_id stock_id,s.symbol symbol,s.name name,p.price price,p.date from stocks s,price p where s.stock_id=p.stock_id order by p.date desc
    2= A1.group(stock_id; symbol, name, if(p2=~.m(2).price,~.m(1).price-p2):diff)

    代码中 ~.m(i) 表示本组记录的第 i 条。

    集算器还能用 m(-2)取倒数第 2 条,用 [1] 表示下一条,这种方式可以很容易进行有序计算和跨行计算,可参考:【集算器的序号思维及定位计算】

     

  • 相关阅读:
    ClickHouse副本节点数据损坏恢复
    中国技术的对外输出:Telegram也开始搞小程序应用了
    编译mtd-utils(使用uclibc编译)
    最长偶串的长度
    JavaScript之无题之让人烦躁的模块化
    一个完整的项目测试方案流程应该是什么样的?
    使用HttpRequest工具类调用第三方URL传入普通以及文件参数并转换MultipartFile成File
    【算法基础】P问题、NP问题、NP-Hard问题、NP-Complete问题
    Rust基础教程
    【嵌入式C语言】常见数据转化函数
  • 原文地址:https://blog.csdn.net/raqsoft/article/details/126459035
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号