如何查询TableB中日期为TableA日期周年前一天的记录ID
解决方案:查询符合周年前一天条件的TableB记录ID
最终SQL查询语句
SELECT b.Id AS TableBId FROM TableA a INNER JOIN TableB b ON a.Id = b.TableAId WHERE DATEADD(day, 1, b.DateTwo) = DATEADD(year, DATEDIFF(year, a.DateOne, DATEADD(day, 1, b.DateTwo)), a.DateOne)
逻辑解释
核心思路是将DateTwo加1天后,验证该日期是否恰好是对应DateOne的整数周年纪念日:
DATEADD(day, 1, b.DateTwo):把目标日期往后推1天,得到待验证的周年候选日期。DATEDIFF(year, a.DateOne, 候选日期):计算DateOne到候选日期的年份差n(正整数)。DATEADD(year, n, a.DateOne):生成DateOne的n周年日期,和候选日期对比,若相等则说明原DateTwo是该周年的前一天。
测试数据验证
针对你的测试数据:
- TableA中
DateOne为2020-01-02 - TableB第一条记录
DateTwo=2021-01-01:加1天为2021-01-02,是DateOne的1周年,符合条件。 - TableB第二条记录
DateTwo=2022-02-02:加1天为2022-02-03,与DateOne的2周年2022-01-02不符,排除。 - TableB第三条记录
DateTwo=2023-01-01:加1天为2023-01-02,是DateOne的3周年,符合条件。
执行查询后将返回TableB的Id为1和3的记录,与预期一致。
内容的提问来源于stack exchange,提问作者Lee
相关产品推荐
相关产品推荐

