You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Left Join两表后基于Date列行号递增Value列?

如何基于日期行号实现值的递增关联?

现有表结构

Table1(实体初始值表)

EntityValue
A5
B10

Table2(日期列表)

Date
1/1/2023
2/1/2023
3/1/2023
4/1/2023
5/1/2023

预期结果

EntityValueDate
A51/1/2023
A62/1/2023
A73/1/2023
A84/1/2023
A95/1/2023
B101/1/2023
B112/1/2023
B123/1/2023
B134/1/2023
B145/1/2023

解决方案

核心是通过**交叉连接(CROSS JOIN)**生成所有实体与日期的组合,再给日期排序生成行号,最后用初始值加上行号偏移量实现递增。

主流SQL方言写法(MySQL 8.0+/PostgreSQL/SQL Server)

SELECT
    t1.Entity,
    t1.Value + (ROW_NUMBER() OVER (ORDER BY t2.Date) - 1) AS Value,
    t2.Date
FROM
    Table1 t1
CROSS JOIN
    Table2 t2
ORDER BY
    t1.Entity,
    t2.Date;

MySQL 5.x 兼容写法(无窗口函数支持)

SELECT
    t1.Entity,
    t1.Value + (t2.rn - 1) AS Value,
    t2.Date
FROM
    Table1 t1
CROSS JOIN
    (SELECT 
        Date,
        @row := @row + 1 AS rn
     FROM 
        Table2,
        (SELECT @row := 0) r
     ORDER BY 
        Date) t2
ORDER BY
    t1.Entity,
    t2.Date;

关键说明

  • 必须在排序行号时指定ORDER BY t2.Date,保证日期顺序正确,否则递增逻辑会混乱
  • 交叉连接会生成Table1与Table2的笛卡尔积,即每个实体对应所有日期,这是实现需求的基础
  • 行号减1是为了让第一行日期对应初始值,后续每行依次加1

内容的提问来源于stack exchange,提问作者CodeMaster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:27:45