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

如何使用FOR SYSTEM_TIME连接SQL Server时态表查看跨表历史变更

SQL Server时态表People与Pets全历史关联查询

要实现People(含当前及历史数据)与Pets的全关联历史查询,核心是匹配两个时态表中有效时间段存在重叠的记录,具体SQL语句如下:

SELECT 
    p.Name AS 人员姓名,
    p.Address AS 住址,
    pt.Name AS 宠物姓名
FROM 
    People FOR SYSTEM_TIME ALL p
INNER JOIN 
    Pets FOR SYSTEM_TIME ALL pt 
    ON p.ID = pt.PeopleID
    -- 关键条件:两个时态记录的有效时间段存在交集
    AND p.ValidFrom < pt.ValidTo 
    AND p.ValidTo > pt.ValidFrom
ORDER BY 
    p.Name, p.ValidFrom, pt.ValidFrom;

逻辑说明

  1. FOR SYSTEM_TIME ALL:取出对应时态表的所有当前版本及历史版本数据,涵盖所有时间维度的记录。
  2. 关联条件:
    • 基础匹配:p.ID = pt.PeopleID 确保宠物属于对应人员
    • 时间重叠校验:p.ValidFrom < pt.ValidTo AND p.ValidTo > pt.ValidFrom 保证人员的某段住址生效期间,宠物的记录也处于有效状态(包括宠物在该期间内的变更,比如从Rover更换为Rusty的情况)。

该查询会输出符合预期的结果,比如:

  • Bob, Address 1, Rover
  • Bob, Address 2, Rover
  • Bob, Address 2, Rusty
  • Bob, Address 3, Rusty

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:40:26