如何在SQL中基于其他表的修改时间筛选对应ID的近一年历史数据?
跨表时间区间筛选实现方案
核心逻辑
用ID关联两张表,以表1里每个ID的Modified Time作为基准,算出基准时间往前推1年的日期作为区间下限,然后把表2里Updated Time落在「下限日期到基准日期」这个范围内的记录挑出来,自动排除基准时间之后的无效数据。
SQL实现代码
假设两张表的名称和字段如下:
- 表1(
table1):id(唯一标识)、modified_time(修改时间) - 表2(
table2):id(关联标识)、updated_time(更新时间)、其他业务字段
SELECT t2.id, t2.updated_time, -- 这里可以按需添加表2的其他业务字段 t1.modified_time AS 基准时间 FROM table1 t1 INNER JOIN table2 t2 ON t1.id = t2.id WHERE t2.updated_time <= t1.modified_time AND t2.updated_time >= DATE_SUB(t1.modified_time, INTERVAL 1 YEAR);
代码说明
INNER JOIN:通过ID把两张表绑定,保证每个ID的基准时间能对应到它在表2里的所有记录DATE_SUB(...):自动计算基准时间前1年的日期,不用手动去算每个ID的区间下限WHERE条件:精准锁定有效记录——既不晚于基准时间,也不早于基准时间前一年,直接过滤掉基准时间之后的无效数据
拿你举的例子来说:ID23的modified_time是2022-07-17,这条SQL会自动筛选出表2里ID23的updated_time在2021-07-17到2022-07-17之间的所有记录。
内容的提问来源于stack exchange,提问作者Tb007
相关产品推荐
相关产品推荐

