具有多个截止日期的存档表的 SQL 查询

问题描述 投票:0回答:1

我正在尝试编写一个查询来从多个截至日期的存档表中返回数据。我知道如何返回单个时间点的数据:

declare @Date date = '2023-09-01'; 
declare @DateTime DATETIME = concat(@Date,' 10:30:00.000');

select 
    @Date,
    [Item],
    [Quantity]
from 
    Fruit for SYSTEM_TIME as of @DateTime;

我在自己的

FirstDateMonth
表中有该月的第一天,如下所示:

日期 日期时间UTC
2023-01-01 2023-01-01 10:30:00.000
2023-02-01 2023-02-01 10:30:00.000
2023-03-01 2023-03-01 10:30:00.000
2023-04-01 2023-04-01 10:30:00.000
2023-05-01 2023-05-01 10:30:00.000
2023-06-01 2023-06-01 10:30:00.000
2023-07-01 2023-07-01 10:30:00.000
2023-08-01 2023-08-01 10:30:00.000
2023-09-01 2023-09-01 10:30:00.000

我想编写一个与上面类似的查询,但它会循环遍历

FirstDateMonth
表上的每个日期并返回与此类似的结果:

日期 项目 数量
2023-01-01 苹果 2
2023-01-01 香蕉 4
2023-02-01 苹果 2
2023-02-01 香蕉 5
2023-03-01 苹果 3
2023-03-01 香蕉 1
2023-04-01 苹果 8
2023-04-01 香蕉 1
2023-05-01 苹果 4
2023-05-01 香蕉 3
等等...

关于如何实现这一点有什么建议吗?

sql-server tsql
1个回答
0
投票

这是凭记忆,因为我目前没有任何东西可以测试..

基本原理是创建一个表值函数,返回单点 int 时间的数据,并将其交叉应用于月初日期。

有点像

CREATE FUNCTION getFruitAsOf (@AsOdDate datetime)
    RETURNS TABLE 
    AS 
        (SELECT * FROM dbo.Fruit FRO SYSTEM_TIME AS OF @AsOfDate)

然后将其交叉应用到您的日期表中

SELECT 
    d.StartDateTime, 
    f.*
FROM myDatesTable d 
    CROSS APPLY getFruitAsOf(d.StartDateTime) f 
© www.soinside.com 2019 - 2024. All rights reserved.