5 步搞定 4 层嵌套 SQL 才能算清的股票连涨天数

简介: SQLazy 用“顺序式工作流”替代嵌套SQL:按思维逻辑分步写(筛选→排序→分段→汇总),每步可预览、易修改、零幻觉;编译器确定性生成原生SQL,AI仅辅助口语转规范语法,大幅提升可读性、可维护性与开发效率。(239字)

嵌套 4 层的 SQL
“最长连续上涨天数”,这道题在数据面试里被反复用来考人,据说通过率不到 20%。不是因为它难,而是因为它把 SQL 的一个老毛病暴露得干干净净:你明明知道逻辑是什么,写出来却是一坨嵌套。

先看需求。一张股票行情表 Stock,记录了每天的收盘价。要算某支股票历史上收盘价连续上涨的最长天数。

逻辑很简单:按日期排序,依次判断每一天是否比前一天上涨,把连续上涨的区间标出来,数每个区间有多长,取最大值。

你可以在脑子里过一遍这个逻辑——排序、判断、分段、计数、取最大。五步,清晰得很。

但落到 SQL 里,它长这样:

select max(ContinuousDays)
from (
    select count(*) ContinuousDays
    from (
        select sum(UpDownTag) over (order by DT) NoRisingDays
        from (
            select DT,
                case when CL > lag(CL) over (order by DT) then 0 
                else 1 end UpDownTag
            from Stock
            where CODE = 100046
        )
    )
    group by NoRisingDays
)

4 层嵌套。从最内层往外读:

第 4 层:case when CL > lag(CL) ... then 0 else 1 end——涨了记 0,没涨记 1。

第 3 层:sum(UpDownTag) over (order by DT)——累加。涨了加 0,值不变;没涨加 1,值 +1。连续上涨的区间内,这个累加值保持不变。

第 2 层:按这个累加值分组,count(*) 数每个区间有多少天。

第 1 层:取最大值。

费了好大劲算是读懂了,似乎原理也明白了。但下次需求变了呢?

比如:“把‘上涨’改成‘涨幅超过 1% 才算涨’”——你得从最内层的 case when 开始改,然后确认改完之后第 3 层的累加逻辑还成立,再确认第 2 层的分组逻辑还成立,最后确认最外层的 max 没被影响。4 层嵌套,改一层就要在脑子里重跑四层。

再比如:“不仅要算最长连涨天数,还要知道最长连涨发生在什么时候”,最外层只有一个 max,拿不到起止日期。你得从最内层开始把日期字段一层层往外传,整个查询重写一遍。

典型的一看就会,一做就废。

这就是嵌套 SQL 的代价:每一层嵌套都是一道“这道题改完会不会影响上一层”的推理题。代码能跑,但改它的成本比重新写一遍还高。不是 SQL 的问题,是“把顺序逻辑塞进嵌套结构”这个动作本身的问题。

SQLazy 的自然写法
SQLazy 的做法很简单:别把逻辑塞进嵌套里,按顺序写出来。

最长连续上涨天数,用 SQLazy 的 workflow 写:
image.png
5 步,和你在脑子里想的逻辑顺序完全一致。

filter:筛选目标股票

sort:按日期排序

segment:按条件分段——CL down 的意思是“如果收盘价下跌,就新开一组”。连续上涨的区间自动落到同一组

summarize:数每组有多少天

summarize:取最大值

每一步都可以预览中间结果。第 3 步执行完,你立刻能看到 NoRisingDays 这一列,同一个数字代表同一个连续上涨区间。分段对不对,当场就知道。
18fc6d4ea1d5e350ef80d596e13880f1_1784165099140100.png
单支股票算完了,下一个需求来了:找出所有股票中,出现过连涨超过 3 天区间的有哪些股票?

在 SQL 里,这需要在前面的嵌套外面再套一层 PARTITION BY CODE,然后在外层 GROUP BY CODE 再过滤。代码又厚了一层,可读性再降一档。你得从最内层的窗口函数开始理解,一路推导到最外层,才知道这个 HAVING 到底在过滤什么。

在 SQLazy 里,逻辑没有任何变化。把 partition CODE 加在需要按股票分组的操作上即可:

image.png
仍然是顺序读下来的 5 步:

sort:按股票代码和日期排序

segment partition CODE:对每支股票分别按下跌分段

summarize group CODE, NoRisingDays:统计每支股票每个连涨区间的天数

filter ContinuousDays > 3:只保留连涨超过 3 天的区间

derive CODE distinct:提取出现过这些区间的股票代码(去重)

每一步都看得懂。不需要在脑子里展开嵌套,不需要推理“这一层改了会不会影响上一层”。

编译器保证:SQL 自动生成 100% 准确
workflow 写完了,逻辑也确认了。接下来要做的只有一件事:点一下“编译”按钮。SQLazy 的编译器会把 workflow确定性地转换成目标数据库的原生 SQL。
2f86414beaa268610fe34ff4b3d15ada_1784165099257100.png
注意,是“编译器”,不是“AI 生成器”。这两者有本质区别:
image.png
编译器不做“猜测”。它只做一件事:按照固定的规则,把 workflow 的每一步翻译成对应的 SQL 语法。sort 就是 ORDER BY,filter 就是 WHERE,segment 就是窗口函数累加分段,summarize 就是 GROUP BY。一一对应,确定无疑。

这意味着:

没有幻觉——编译器不会“发明”不存在的表或字段,不会“猜测”业务逻辑

没有随机性——同样的 workflow,今天编译和明天编译,结果完全一样

可审计——workflow 的每一步都能追溯到生成的 SQL 片段,审查者可以验证“为什么这段 SQL 是这样写的”

如果目标数据库从 MySQL 换成 PostgreSQL,只需切换一个选项,编译器自动适配 SQL 方言。workflow 不用改,因为逻辑没变,变的只是“翻译目标”。
3ba6f768cfb5e01b4f074c98683c6612_1784165098532100.png
workflow 是给人看的,SQL 是给数据库跑的。编译器保证两者永远一致。

LLM 辅助规范
在 SQLazy 的 workflow 中,AI 的角色也被重新定义了。以往做法中,AI 负责从自然语言直接生成最终 SQL,高难度、高幻觉率。而在 SQLazy 中,AI 只做一件事:把用户口语化的步骤描述转译成规范的 workflow 语法。
1cf1dec6d8f67c4d0a8f7895b3d8a6b1_1784165099061100.png
LLM 将自然输入规范成 SQLazy 语句

前者是“决策”,让 AI 决定 SQL 怎么写,风险极高。后者是“翻译”,让 AI 把口语转成规范格式,即便转译有偏差,你在 workflow 层面一眼就能发现,纠正成本几乎为零。

AI writes the logic. A compiler writes the SQL.

相关文章
|
1月前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
2896 134
|
2月前
|
SQL 人工智能 JSON
智能问数(Text2SQL)工业级落地,纯 AI 黑盒方案都没戏
本文剖析Text2SQL领域“高准确率宣传”与“无公开DEMO”之间的矛盾,指出黑盒方案因AI幻觉、不可解释、不可审计,难担企业级信任;润乾NLQ采用白盒路线——以人类可读可确认的“规范文本”为中间层,AI仅作翻译,后续规则编译100%确定,真正实现稳定、可解释、可落地的智能问数。
|
7月前
|
人工智能 测试技术 开发工具
游戏外包开发的流程
本文详解2026年游戏外包开发全流程:从需求对接、预研原型、正式开发到集成测试与交付验收,突出AI工具提效与艺术-技术平衡。涵盖商务、技术、协作三大维度,并揭示沟通、文档、版本三大核心痛点。(239字)
|
9月前
|
SQL 自然语言处理 BI
另辟蹊径的 Text2SQL,不用大模型也能搞 chatBI
润乾报表NLQ组件摒弃大模型路线,采用规则词典与领域知识库,将自然语言精准转化为MQL查询语言,实现稳定、低成本、可维护的ChatBI。其核心在于结构化语义解析,避免“幻觉”,支持复杂多表关联与计算,适用于企业级BI场景,是可靠高效的自然语言查询解决方案。
|
2月前
|
SQL 人工智能 自然语言处理
准确率 100% 的智能问数(Text2SQL)实践,还要关心什么指标?
润乾NLQ创新采用“规范文本+规则编译”架构,将口语转为可验证的中间语言,再确定性生成SQL,实现规范文本→SQL环节100%准确率。规避大模型幻觉,支持多表JOIN、子查询、聚合等复杂场景,实施门槛低、结果稳定可控。(239字)
|
9月前
|
SQL 自然语言处理 BI
万字长文解析 NLQ 破局 Text2SQL,兼得灵活复杂准确
润乾NLQ创新采用“规范文本”作中间层,兼顾问题灵活性与查询准确性。通过人类可读的规范文本确认意图,结合规则引擎生成精确SQL,并支持复杂查询,以低成本实现企业级Text2SQL的可靠落地,突破传统三难困境。
|
4月前
|
人工智能 JavaScript BI
用 AI 编程生成 ECharts 图表
报表内置图表有限,复杂图表(如K线图、地图等)需手写ECharts代码,学习成本高、调试耗时。本文以K线图为例,介绍“参数导出→AI生成→脚本回填”三步法:用Trae等AI工具根据报表导出的参数自动生成JS脚本,再替换嵌入报表模板,大幅提升开发效率。(239字)
|
9月前
|
SQL XML 自然语言处理
Text2SQL 破局技术解析之一:规范文本与灵活性
润乾NLQ创新采用“规范文本”作为中间层,将自然语言转SQL分为三阶段:LLM生成可读的规范文本,用户确认意图后,通过规则引擎转为MQL再生成准确SQL。该方案兼顾灵活性、准确性与复杂查询支持,大幅降低企业实施成本,为人机协同的Text2SQL提供了可行的工程化路径。
|
7月前
|
XML 人工智能 自然语言处理
ChatBI 不止 Text2SQL,加上多维分析才算全链 AI+ 商业智能
润乾BI突破传统ChatBI局限,以规则引擎实现从“问数据”到“操作数据”的全链路自然语言分析。支持分组汇总、排名、环比、图表生成等复杂操作,指令规范、结果确定,杜绝AI幻觉。通过智能提示降低使用门槛,更可与LLM协同,将口语问题转化为精准分析步骤,让数据决策高效、可信、可控。
|
7月前
|
SQL 人工智能 自然语言处理
这款 Text2SQL 技术为什么能对噩梦般的 JOIN 免疫
润乾 NLQ 以“语义层+确定性编译”破解 Text2SQL 复杂 JOIN 难题。通过 DQL 实现外键属性化与按维对齐,将多表关联转化为可验证规则,摆脱 LLM 幻觉依赖,准确率高、成本低,适合企业复杂场景落地。