新闻详情

新闻详情

首页 / 资讯中心 / 详情

SQLazy:分组累计求和

发布时间:2026/9/3 16:37:52来源:尧图网络
SQLazy:分组累计求和
问题描述只保留开票行金额累计从上次开票开始有一张业务流水表包含 ID、Date、Invoiced 和 Amount 四个字段。每个月有一条记录其中 Invoiced1 表示该月开了发票。现在要输出每个 ID 下所有开票月份并且每张发票的金额等于自上个月开票或开始到当前月所有金额的总和包括当前发票本身。源数据IDDateInvoicedAmountAAA2023-01010AAA2023-02015AAA2023-03115AAA2023-04010AAA2023-05010AAA2023-06110BBB2022-05040BBB2022-06120BBB2022-07030BBB2022-08130期望结果只保留开票行每行 Amount 是自上次开票以来的累计值。IDDateInvoicedAmountAAA2023-03140AAA2023-06130BBB2022-06160BBB2022-08160以 AAA 为例第一张发票 2023-03之前有 1 月 (10) 2 月 (15) 自身 (15) 40第二张发票 2023-06上次发票之后有 4 月 (10) 5 月 (10) 自身 (10) 30BBB 同理。SQLazy 分步实现ValueAnchorStatementt1invoicesort id,dt desct2compute invoiced cum as grp partition idt3summarize dt max as dt invoiced max as invoiced amount sum as amount group id grpt4derive id dt invoiced amount下面分别解释一下这些步骤。第 1 步按 ID 和日期排序日期降序sort id,dt desc这一步是为了后续分组做准备。降序排列后一个发票行与它前面的非开票行会先被处理累计求和时这些行会被归入同一组。第 2 步对 invoiced 做累计求和生成分组号compute invoiced cum as grp partition id在每个 ID 分区内按当前顺序降序对 invoiced 进行累计求和包括当前行。结果如下第 3 步按 ID 和 grp 分组汇总summarize dt max as dt invoiced max as invoiced amount sum as amount group id grpdt max因为降序每组内日期最大的是开票月份发票行的日期。invoiced max每组至少有一个 invoiced1所以最大值是 1。amount sum累加该组所有金额即自该发票以来包括自身的总和。第 4 步选择需要的列derive id dt invoiced amount这一步只是清理输出去掉辅助列 grp。编译生成 SQL完成上述步骤后通过 SQLazy 的编译器可以生成等价的原生 SQL无需手动编写。这里生成 MySQL 语句WITH t3 AS ( SELECT id, grp, MAX(dt) AS dt, MAX(invoiced) AS invoiced, SUM(amount) AS amount FROM ( SELECT id, dt, invoiced, amount, SUM(invoiced) OVER ( PARTITION BY id ORDER BY CASE WHEN id IS NULL THEN 1 ELSE 0 END, id ASC, CASE WHEN dt IS NULL THEN 1 ELSE 0 END, dt DESC ROWS UNBOUNDED PRECEDING ) AS grp FROM invoice ) t2 GROUP BY id, grp ) SELECT id, dt, invoiced, amount FROM t3 ORDER BY id, grp你不需要读懂或调试这段 SQL只需确认前面四步的逻辑正确编译器就会输出可运行的代码。列个表格总结一下传统 SQLSQLazy步骤数多层 CTE 窗口函数边界4 步排序→累计→汇总→选列核心技巧晦涩的 ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING直观的“降序 累计求和”可读性低需要理解偏移窗口高步骤即思考过程调试方式手动拆解 CTE反复运行单步执行每一步中间结果可见跨数据库需手动调整方言差异编译器自动生成对应语法这个实例展示了 SQLazy 处理“按事件重置的累计”类问题的自然性通过一个简单的排序技巧加上累计求和就能把复杂的分组逻辑拆解为清晰的动作。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

全球债务已破百亿,高息时代吞噬未来 2026/9/3 19:05:31

全球债务已破百亿,高息时代吞噬未来

《低利率时代已死,现金流崛起》——真正稀缺的不是资本,而是承受高利率的能力3%的增长并不可怕,可怕的是近100%的公共债务,正遇上一场“钱变贵”的时代切换。全球经济仍在增长,却越来越不均匀。发达经济体债券收益率升…

阅读更多 →
国网2013版终端调试程序实战:从解压到现场调试全流程解析 2026/9/3 19:05:31

国网2013版终端调试程序实战:从解压到现场调试全流程解析

简介:国网2013版终端调试程序是一款面向电力行业终端运维与调试人员的专用工具,针对国网终端设备在参数配置、规约测试与数据读取等场景设计,可帮助现场人员快速完成终端联调与故障排查。压缩包共包含39个文件,整体大小约6.28MB&a…

阅读更多 →
高超声速飞行器再入轨迹规划Matlab仿真:从建模到约束处理全解析 2026/9/3 19:05:31

高超声速飞行器再入轨迹规划Matlab仿真:从建模到约束处理全解析

简介:面向飞行器轨迹规划研究与Matlab仿真应用,这份高超声速飞行器轨迹规划示例程序基于Gauss伪谱法和GPOPSII求解器,为科研人员、工程师及高校研究生提供从动力学建模到最优轨迹输出的完整参考,适用于科研与工程实践中的飞行路径…

阅读更多 →
A*算法从理论到真车落地:路径规划选型、实现与工程避坑全解析 2026/9/3 19:05:31

A*算法从理论到真车落地:路径规划选型、实现与工程避坑全解析

简介:这是一份面向MATLAB学习者与路径规划初学者的A 算法演示附件,对应博文中的完整可运行代码。压缩包共3个文件,其中两个.m文件分别实现两套A 路径搜索流程,包含图构建、启发式函数、开放列表管理、路径回溯与可视化等关键模块…

阅读更多 →
RAR压缩包密码忘了怎么办?Advanced RAR Password Recovery实操指南 2026/9/3 19:05:31

RAR压缩包密码忘了怎么办?Advanced RAR Password Recovery实操指南

简介:这是Advanced RAR Password Recovery 4.53的注册码分享包,面向因忘记密码而无法打开RAR压缩包的普通用户,以及需要批量恢复加密压缩包的办公人员。该工具支持暴力枚举、掩码匹配等多种方式找回密码,适用于个人资料恢复、旧档…

阅读更多 →
基于HAL库的OLED驱动开发:从I2C原理到实战排查 2026/9/3 19:02:30

基于HAL库的OLED驱动开发:从I2C原理到实战排查

简介:基于HAL库的STM32 OLED驱动开发资料,面向嵌入式初学者以及需要快速为项目接入信息显示模块的开发者。资料以STM32单片机为主控,围绕OLED驱动开发的完整流程展开:从GPIO推挽输出模式设置、I2C或SPI通信外设初始化和复用功能配…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞