如何基于日期条件在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
相关产品推荐
相关产品推荐

