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

如何基于日期条件在SQL中关联两张客户相关数据表?

关联两张表并筛选起始日期后的账户数据

核心思路是通过客户编号关联两张表,同时添加日期过滤规则,只保留表2中日期晚于(或等于)对应客户在表1里起始日期的记录。

基础实现(内连接,仅保留有符合条件账户数据的客户)

用INNER JOIN关联两张表,匹配客户编号后,通过WHERE子句过滤日期:

SELECT 
    t1."Client number",
    t1."start date",
    t2."Date" AS account_record_date,
    t2."account balance"
FROM 
    table1 t1
INNER JOIN 
    table2 t2 ON t1."Client number" = t2."Client number"
WHERE 
    t2."Date" >= t1."start date";

保留所有表1客户(左连接)

如果需要保留表1里的全部客户(哪怕该客户在表2中没有符合日期条件的账户数据),改用LEFT JOIN,并把日期条件放到JOIN的关联规则中(避免过滤掉表1的客户记录):

SELECT 
    t1."Client number",
    t1."start date",
    t2."Date" AS account_record_date,
    t2."account balance"
FROM 
    table1 t1
LEFT JOIN 
    table2 t2 ON t1."Client number" = t2."Client number"
        AND t2."Date" >= t1."start date";

额外注意事项

  • 如果表1中同一客户存在多条记录(多个起始日期),需先明确取哪一个日期(比如最早/最晚的起始日期),可以用子查询预处理表1:
    WITH cleaned_table1 AS (
        SELECT 
            "Client number",
            MIN("start date") AS earliest_start_date -- 或用MAX取最晚起始日期
        FROM table1
        GROUP BY "Client number"
    )
    SELECT 
        ct1."Client number",
        ct1.earliest_start_date,
        t2."Date",
        t2."account balance"
    FROM cleaned_table1 ct1
    INNER JOIN table2 t2 ON ct1."Client number" = t2."Client number"
    WHERE t2."Date" >= ct1.earliest_start_date;
    
  • 确保两张表的日期字段类型一致(比如都是DATE类型),避免因格式不匹配导致过滤逻辑出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:47:09