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

基于时态表OrderlinesHistory的Ecode状态变动月度汇总SQL需求

时态表Ecode状态按月汇总实现

环境说明

我们使用的#OrderlinesHistory是一张时态表,以下是临时表结构及测试数据:

drop table #Orderlines
drop table #Orders
drop table #OrderlinesHistory

create table #Orders
(Id uniqueidentifier
,OrderDate datetime
,TotalValue Decimal(9,2)
)
create table #Orderlines
(Id uniqueidentifier
,OrderId uniqueidentifier
,ActivationDate dateTime
,Value decimal (9,2)
,Ecode varchar(50)
,EcodeStatusId int
,ValidFrom dateTime
,ValidTo DateTime)

create Table #OrderlinesHistory
(Id uniqueidentifier
,OrderId uniqueidentifier
,ActivationDate dateTime
,Value decimal (9,2)
,Ecode varchar(50)
,EcodeStatusId int
,ValidFrom dateTime
,ValidTo DateTime)


insert #Orders
(id,OrderDate,TotalValue)
values ('43D7E9F9-7688-4905-BC69-08DCF81D15BB','2024-10-26',40)
,('3D24980B-B83F-4D8B-DE13-08DCF81D15AD','2024-11-25',25)

insert #Orderlines
(id,OrderId,ActivationDate,Ecode,EcodeStatusId,ValidFrom,ValidTo,Value)
values
('2987bdba-5345-4154-b8bd-41bc0186eefc','43D7E9F9-7688-4905-BC69-08DCF81D15BB','2024-10-26','ECODE-0',1, '2024-10-26',null,10)
,('2FAC6F53-D6E0-4C99-8C29-08DCD62AB512','43D7E9F9-7688-4905-BC69-08DCF81D15BB','2024-11-01','ECODE-1',2, '2024-11-05',null,10)
,('A5776A49-9A00-4450-8C2B-08DCD62AB512','43D7E9F9-7688-4905-BC69-08DCF81D15BB','2024-11-01','ECODE-2',3, '2024-11-17',null,10)
,('05B58778-94BA-4B85-8C27-08DCD62AB512','43D7E9F9-7688-4905-BC69-08DCF81D15BB','2024-11-01','ECODE-3',4, '2024-11-30',null,10)
,('F3639DD8-3515-47EC-2A3B-08DCD97CAC6C','3D24980B-B83F-4D8B-DE13-08DCF81D15AD','2024-11-25','ECODE-1-A',1, '2024-11-25',null,25)

insert #OrderlinesHistory
(id,OrderId,ActivationDate,Ecode,EcodeStatusId,ValidFrom,ValidTo,Value)
values
('2FAC6F53-D6E0-4C99-8C29-08DCD62AB512','43D7E9F9-7688-4905-BC69-08DCF81D15BB','2024-10-26',null,null, '2024-10-26','2024-10-28', 10)
,('2FAC6F53-D6E0-4C99-8C29-08DCD62AB512','43D7E9F9-7688-4905-BC69-08DCF81D15BB','2024-11-01','ECODE-1',1, '2024-10-28','2024-11-05',10)

,('A5776A49-9A00-4450-8C2B-08DCD62AB512','43D7E9F9-7688-4905-BC69-08DCF81D15BB','2024-10-26',null,null, '2024-10-26','2024-10-28',10)
,('A5776A49-9A00-4450-8C2B-08DCD62AB512','43D7E9F9-7688-4905-BC69-08DCF81D15BB','2024-11-01','ECODE-2',1, '2024-10-28','2024-11-17',10)

,('05B58778-94BA-4B85-8C27-08DCD62AB512','43D7E9F9-7688-4905-BC69-08DCF81D15BB','2024-10-26',null,null, '2024-10-26','2024-10-28',10)
,('05B58778-94BA-4B85-8C27-08DCD62AB512','43D7E9F9-7688-4905-BC69-08DCF81D15BB','2024-11-01','ECODE-3',1, '2024-10-28','2024-11-30',10)

需求说明

需按Ecode状态变动的月份汇总其状态情况:

  • 10月下单的4个Ecode在10月状态均为1(生效),其中3个分别在11月不同日期变更为状态2(已兑换)、3(已取消)、4(已过期),剩余1个保持生效状态
  • 11月新增1个25英镑的Ecode,状态为1(生效)
    需生成符合目标样式的汇总报表。

尝试的SQL语句

-- 按订单月份和状态汇总数据
WITH OrderMonths AS (
    SELECT
        FORMAT(o.OrderDate, 'MMM-yy') AS OrderMonth,
        o.TotalValue AS OrderTotal,
        h.EcodeStatusId,
        h.Value
    FROM
        #Orders o
    JOIN
        #Orderlines ol ON o.Id = ol.OrderId
    JOIN
        #OrderlinesHistory h ON ol.Id = h.Id
    WHERE
        h.ValidFrom <= o.OrderDate
        AND (h.ValidTo IS NULL OR h.ValidTo >= o.OrderDate)
),
StatusSummary AS (
    SELECT
        OrderMonth,
        SUM(CASE WHEN EcodeStatusId = 1 THEN Value ELSE 0 END) AS Live,
        SUM(CASE WHEN EcodeStatusId = 2 THEN Value ELSE 0 END) AS Redeemed,
        SUM(CASE WHEN EcodeStatusId = 3 THEN Value ELSE 0 END) AS cancelled
    FROM
        OrderMonths
    GROUP BY
        OrderMonth
)
SELECT
    sm.OrderMonth,
    SUM(om.OrderTotal) AS OrderTotal,
    sm.Live,
    sm.Redeemed,
    sm.cancelled
FROM
    StatusSummary sm
LEFT JOIN
    (SELECT FORMAT(OrderDate, 'MMM-yy') AS OrderMonth, TotalValue AS OrderTotal FROM #Orders) om
    ON sm.OrderMonth = om.OrderMonth
GROUP BY
    sm.OrderMonth, sm.Live, sm.Redeemed, sm.cancelled;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:57:15