如何编写SQL查询从归档表获取多个指定时间点的历史数据?
实现方案
你可以通过CROSS APPLY(或OUTER APPLY)来实现遍历FirstDateMonth表中所有时间点,批量查询归档表数据的需求,具体SQL如下:
select fdm.Date, f.Item, f.Quantity from FirstDateMonth fdm cross apply ( select Item, Quantity from Fruit for SYSTEM_TIME as of fdm.DateTimeUTC ) f order by fdm.Date, f.Item;
说明:
- CROSS APPLY:针对
FirstDateMonth中的每一条记录,执行子查询里的归档数据查询,自动合并所有时间点的结果集,完全匹配你需要的输出格式。 - OUTER APPLY:如果需要保留
FirstDateMonth中所有时间点(哪怕某个时间点Fruit表无对应数据),替换CROSS APPLY为OUTER APPLY即可,无数据的行Item和Quantity会显示为NULL。 - 子查询直接使用
FirstDateMonth表的DateTimeUTC字段作为SYSTEM_TIME AS OF的参数,无需单独声明变量,简化逻辑。
内容的提问来源于stack exchange,提问作者Hslew
相关产品推荐
相关产品推荐

