分组累计求和--极简法

简介: 本例演示SQLazy如何优雅解决“按开票事件重置累计”的问题:先按ID、日期降序排序,再对invoiced字段做累计求和生成分组号,继而按ID与分组号聚合,取每组最大日期(即开票月)及金额总和,最终输出各次开票的累计金额。无需手写复杂SQL。

问题描述:只保留开票行,金额累计从上次开票开始
有一张业务流水表(包含 ID、Date、Invoiced 和 Amount 四个字段)。每个月有一条记录,其中 Invoiced=1 表示该月开了发票。

现在要输出:每个 ID 下所有开票月份,并且每张发票的金额等于自上个月开票(或开始)到当前月所有金额的总和(包括当前发票本身)。

源数据:
image.png
期望结果:只保留开票行,每行 Amount 是自上次开票以来的累计值。
image.png
以 AAA 为例:

第一张发票 2023-03:之前有 1 月 (10) + 2 月 (15) + 自身 (15) = 40

第二张发票 2023-06:上次发票之后有 4 月 (10) + 5 月 (10) + 自身 (10) = 30

BBB 同理。

SQLazy 分步实现
image.png
下面分别解释一下这些步骤。

第 1 步:按 ID 和日期排序,日期降序

sort id,dt desc

这一步是为了后续分组做准备。降序排列后,一个发票行与它前面的非开票行会先被处理,累计求和时这些行会被归入同一组。
9749ba432c8827658ded83ead99a0a06_1781574536223100.png
第 2 步:对 invoiced 做累计求和,生成分组号

compute invoiced cum as grp partition id

在每个 ID 分区内,按当前顺序(降序)对 invoiced 进行累计求和(包括当前行)。结果如下:
8f75d28859290be29c866656978836d1_1781574536315100.png
第 3 步:按 ID 和 grp 分组汇总

summarize dt max as dt invoiced max as invoiced amount sum as amount group id grp

dt max:因为降序,每组内日期最大的是开票月份(发票行的日期)。

invoiced max:每组至少有一个 invoiced=1,所以最大值是 1。

amount sum:累加该组所有金额,即自该发票以来(包括自身)的总和。
cba45092a31b8e551520aa9f6bdbeda7_1781574536420100.png
第 4 步:选择需要的列

derive id dt invoiced amount

这一步只是清理输出,去掉辅助列 grp。
编译生成 SQL

完成上述步骤后,通过 SQLazy 的编译器可以生成等价的原生 SQL,无需手动编写。
684231d2b6f31497e19e74fda8f5e94c_1781574536131100.png
这里生成 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,只需确认前面四步的逻辑正确,编译器就会输出可运行的代码。

列个表格总结一下:
image.png
这个实例展示了 SQLazy 处理“按事件重置的累计”类问题的自然性:通过一个简单的排序技巧加上累计求和,就能把复杂的分组逻辑拆解为清晰的动作。

相关文章
|
2月前
|
数据采集 缓存 移动开发
APP 用户行为数据治理实践:从事件口径管控到增长分析链路设计
本文从 APP 事件口径、双模采集、OneID 身份归一和漏斗留存分析出发,讨论用户行为数据治理与增长分析链路的建设方法。
|
机器学习/深度学习 监控 安全
网络安全产品之认识入侵防御系统
由于网络安全威胁的不断演变和增长。随着网络技术的不断发展和普及,网络攻击的种类和数量也在不断增加,给企业和个人带来了巨大的安全风险。传统的防火墙、入侵检测防护体系等安全产品在面对这些威胁时,存在一定的局限性和不足,无法满足当前网络安全的需求。入侵防御系统(IPS)作为一种主动防御的解决方案应运而生。它可以实时检测和防御网络流量中的恶意攻击和威胁,通过串接的方式部署在网络中,对入侵行为进行实时阻断,从而极大地降低了入侵的危害。
1302 1
|
编解码 算法 文件存储
浅谈动图文件格式 - GIF
介绍动图的文件格式,及其优劣
3727 0
浅谈动图文件格式 - GIF
|
2月前
|
安全 Java 关系型数据库
基于javaweb的图书管理系统的设计和实现
大家好,今天给大家介绍基于javaweb的图书管理系统的设计和实现。文章目录:1.资源详情2.资源下载3.项目简介1.资源详情包含内容:整套源码+数据库文件+开发环境软件+环境部署视频教程。资源下载下载地址见个人头像。3.项目简介本项目主要是图书管理系统,系统主要功能模块包括,用户端:用户注册与登录、图书查询、借阅与归还、借阅历史查看、个人资料管理、安全退出
200 1
|
2月前
|
人工智能 自然语言处理 开发工具
Codex 实践系列 Vol.03:Codex 那些好用的 slash command
本文是Codex系列第三篇,聚焦真实项目协作:以AI志愿填报Demo为案例,详解`/status`、`/goal`、`/plan`等核心slash命令的实战用法——从确认环境、设定目标、规划修改,到聚焦文件、审查diff、复查逻辑、压缩长对话,系统提升AI编程的可控性与工程规范性。
259 2
Codex 实践系列 Vol.03:Codex 那些好用的 slash command
|
2月前
|
人工智能 自然语言处理 数据可视化
告别低效重复劳作!QoderWork全功能精通实操教程、场景用法、高阶技巧大全
在数字化办公常态化的当下,绝大多数职场人、学生、自由创作者、小微企业运营者,每天耗费大量时间处理文件整理、文档撰写、数据统计、资料汇总、格式排版、网页信息抓取等重复性、低价值琐碎工作。这类机械性工作耗时久、容错率低、极度消耗精力,不仅压缩核心工作的创作与思考时间,还容易因人为疏忽出现格式错乱、数据遗漏、整理不规范等问题。
133 0
|
2月前
|
存储 人工智能 安全
企业AI知识库搭建教程:从零到一的完整技术实现
本文面向开发者,详解企业AI知识库本地化搭建全流程:涵盖文档解析(PDF/OCR/语义分块)、Milvus+ES混合检索、BGE+Qwen2.5向量化与推理、RAG优化及RBAC+ABAC安全架构,强调数据不出内网、GPU显存隔离与合规审计。(239字)
581 7
|
2月前
|
人工智能 缓存 搜索推荐
面向AI原生搜索时代的GEO架构设计:从内容索引到语义检索系统的全链路优化
GEO(生成式引擎优化)是AI搜索时代的新范式,核心目标从“网页排名”转向“被AI理解、验证与引用”。它以知识片段、实体关系、语义结构和RAG适配为优化单位,助力企业成为大模型可信信源。
225 0
|
2月前
|
存储 前端开发 算法
PNG、JPG、WebP 有什么区别?浏览器端图片格式转换原理与实践
本文介绍一款纯浏览器端的在线图片格式转换工具(支持PNG/JPG/WebP/AVIF),详解各格式差异与适用场景,并分享如何利用Canvas、File API和toBlob()实现零上传、保隐私、高效率的本地转换方案。
|
2月前
|
人工智能 缓存 测试技术
Harness 效应:编排设计如何影响企业级 Agent 的 Token 成本
论文《The Harness Effect》指出:企业级Agent成本主要由编排层(Harness)决定,而非模型单价。Harness通过优化上下文组织、历史压缩、工具调用与重试机制,将单任务Token消耗降低38%(14.2k→8.8k),成本下降33%–61%,CPM提升68%。优化本质是将成本问题从“选模型”转向“精设计”。
261 0
Harness 效应:编排设计如何影响企业级 Agent 的 Token 成本

热门文章

最新文章