合并有重叠的时间区间----AI解法

简介: 该方案用4步业务逻辑(排序→算前序最大结束日→按断点分组→聚合)自动合并账户内重叠时间区间,无需手写复杂SQL,由SQLazy编译为高效原生SQL,大幅提升开发效率与可维护性。(239字)

问题描述

一张表记录了多个账户的时间区间,每个账户有多条记录,区间之间可能存在重叠。

源数据:
image.png
期望结果(合并每个账户内所有重叠的区间):
image.png
以账户 A 为例:

前三个区间(6/20~6/29、6/25~7/25、7/20~8/26)互相重叠,合并为 6/20~8/26;

12/25~1/25 独立;

4/27~7/27、6/25~7/14、7/10~8/14 重叠,合并为 4/27~8/14;

9/10~11/12 独立。

B 同理,两个区间重叠合并。

SQLazy 分步实现

核心思路:判断当前区间的开始日期是否大于前面所有区间的最大结束日期。如果大于,说明当前区间与之前所有区间都不重叠,需要新开一组;否则合并到当前组。
image.png

第 1 步:按账户和开始日期排序

sort account_id, start_date

将数据按 account_id 和 start_date 升序排列,确保每个账户内的区间按时间顺序处理。
6e615b28af9b9077abaefce3e8411237_1781678832192100.png
第 2 步:计算当前行之前所有行的最大结束日期

compute end_date[:-1] max as prev_max; partition account_id

在每个账户分区内,计算从第一行到当前行的前一行中 end_date 的最大值,记为 prev_max。

5ec2ba5437e31e4a1e97d6108d430f4a_1781678832273100.png
第 3 步:按条件分段,生成组号

segment condition start_date > prev_max as gid; partition account_id

依次检查每行:如果 start_date > prev_max,说明当前区间与之前所有区间不重叠,则新开一组(gid+1);否则归入同一组。
c5135f756e7b10b56bfe7bab87938556_1781678832349100.png
第 4 步:按账户和组号汇总

summarize start_date min as start_date, end_date max as end_date; group account_id, gid

对每组取最早的开始日期和最晚的结束日期,得到合并后的区间。
c523596cde7d6cc4cdcd852f16eb2c80_1781678831328100.png
最后删除辅助列 gid。

编译生成 SQL

确认上述 4 步逻辑后,SQLazy 编译器自动生成原生 SQL(以 MySQL 为例):

WITH t2 AS (
    SELECT
        account_id,
        start_date,
        end_date,
        MAX(end_date) OVER (
            PARTITION BY account_id
            ORDER BY
                CASE WHEN account_id IS NULL THEN 1 ELSE 0 END,
                account_id ASC,
                CASE WHEN start_date IS NULL THEN 1 ELSE 0 END,
                start_date ASC
            ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
        ) AS prev_max
    FROM
        acc
),
t3 AS (
    SELECT
        account_id,
        start_date,
        end_date,
        prev_max,
        1 + SUM(
            CASE
                WHEN start_date > prev_max THEN 1
                ELSE 0
            END
        ) OVER (
            PARTITION BY account_id
            ORDER BY
                CASE WHEN account_id IS NULL THEN 1 ELSE 0 END,
                account_id ASC,
                CASE WHEN start_date IS NULL THEN 1 ELSE 0 END,
                start_date ASC
        ) AS gid
    FROM
        t2
)
SELECT
    account_id,
    MIN(start_date) AS start_date,
    MAX(end_date) AS end_date
FROM
    t3
GROUP BY
    account_id,
    gid
ORDER BY
    account_id,
    start_date;

你不需要读懂或调试这段 SQL,只需确认前面 4 步的逻辑正确,编译器就会输出可运行的代码。

为什么这很重要

image.png
SQLazy 让你用业务语言描述逻辑,而不是用 SQL 语法写嵌套查询。这个“合并重叠区间”的例子只用 4 步就表达清楚了——排序、计算前面最大结束日期、按条件分段、汇总。编译器帮你生成最终的 SQL,你只需要验证每一步的业务含义是否正确。

相关文章
|
3月前
|
人工智能 缓存 安全
员工私用ChatGPT处理业务数据?企业大模型合规风险如何化解
员工私自将业务数据粘贴到公共大模型,已成数据泄露高发场景。本文梳理合规风险,从制度与技术层面给出落地解决思路。
|
3月前
如何提高短信签名审核通过率?这些规则和常见问题一次讲清 | 阿里云短信服务
短信签名用于标识短信发送方身份。如果您不确定应该申请什么签名、选择“自用”还是“他用”,或者签名申请完成后不知道当前是否可以正常使用,可以通过本文快速判断。 本文主要提供常见场景下的选择和处理建议。完整规则、控制台操作及实名制报备要求,可通过文中的链接查看对应详细文档。
476 0
|
3月前
|
自然语言处理 监控 前端开发
Qoder接入OpenBoost MCP,让Agent跑通跨境电商业务
Qoder联合OpenBoost接入MCP协议,将Amazon、TikTok等跨境数据深度融入Agentic编程工作流。开发者仅需自然语言描述需求,Agent即可自动调用工具、生成选品报告、Listing文案或监控仪表盘,实现从代码生成到端到端业务交付的跃迁。
385 0
|
3月前
|
弹性计算 安全
阿里云服务器ECS按流量计费的话,1GB流量多少钱?流量超出会怎样?
阿里云ECS按流量计费仅对出网流量收费,各地域单价不同:北京/上海/杭州等为0.8元/GB,青岛0.72元/GB,海外低至0.5元/GB。超量不限速,但欠费将暂停公网访问。详情见官网定价页。阿里云服务器ECS官网:https://t.aliyun.com/U/AZBUsA
|
3月前
|
数据采集 监控 安全
小红书搜索SEO优化:UGC信源池的排序系统架构与工程化实践
本文系统解析小红书搜索SEO工程方法论:基于UGC信源池+实时索引+四因子排序架构,详解关键词命中、内容质量、账号权重、互动信号的计算逻辑,提供从0到35天的落地路线、结构化笔记模板与多账号矩阵策略,并附白帽自查清单。(239字)
|
3月前
|
存储 数据采集 数据可视化
大模型Agent系统核心拆解:从任务规划、工具调用到记忆机制,智能自主代理实践20.3
本文系统阐述大模型Agent的核心价值与落地逻辑:突破原生大模型被动应答局限,通过任务规划(大脑)、工具调用(手脚)、智能记忆(沉淀)三大能力,实现复杂业务全流程自主执行,推动AI从演示走向真实办公、数据、研发等场景深度应用。
347 2
|
3月前
|
SQL 人工智能 安全
AI Agent 安全防护实战:最小权限与 Human-in-the-loop 的工程防线
本文深入剖析Agent安全核心风险——OWASP 2025新列的“LLM06 过度代理”,指出其本质是攻击面从文本升级为真实动作。文章系统梳理六大风险(含提示注入放大、输出处理不当等),提出“功能过多、权限过大、自主过高”三大根因,并给出四道工程化防线:最小权限工具收敛、人工审批闸门、输出校验与成本熔断,强调安全须内生于架构设计。
488 2
|
3月前
|
弹性计算 Ubuntu 网络协议
阿里云轻量应用服务器支持绑定多个公网IP吗?如果需要多个IP地址怎么办?
阿里云轻量应用服务器仅“多公网IP型”支持2–3个固定IPv4地址(带宽共享),通用型仅含1个不可更换公网IP;如需灵活绑定/迁移IP,推荐ECS+EIP方案。阿里云轻量应用服务器官网:https://t.aliyun.com/U/dwftch
|
3月前
|
弹性计算
阿里云云数据传输CDT是干嘛用的?赠送220GB/月公网流量详细说明
阿里云云数据传输CDT(Cloud Data Transfer)是统一计费产品,整合ECS、EIP、CLB等多款云服务的公网及跨地域流量,支持阶梯降价、220GB/月免费额度(内地20GB+海外200GB),开通即用、免费且不可退订。阿里云云数据传输CDT官网:https://t.aliyun.com/U/pZRl7R