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

Azure SQL数据仓库中T-SQL合并连续行组并求和的技术求助

解决方案:合并连续相同类型的交易记录

这是典型的连续相同分组聚合场景,我们可以利用窗口函数来识别连续的交易类型组,再进行聚合计算,完全适配Azure SQL数据仓库的T-SQL环境。

实现思路

  1. 标记组边界:使用LAG()函数获取当前行的上一行交易类型,判断是否与当前行一致,标记新组的起始位置。
  2. 生成分组ID:通过累计组边界标记,为每一组连续相同交易类型的记录分配唯一的分组ID。
  3. 聚合计算:按会话ID(SessionId)和分组ID聚合,计算每组的Rank总和,同时保留每组最早记录的Id、DateTimeEnd和DateStart。

完整T-SQL代码

WITH GroupedTransactions AS (
    SELECT 
        *,
        -- 标记当前行是否是新组的开始:如果上一行交易类型不同,或者是组内第一行,则标记为1
        CASE 
            WHEN LAG(TransactionType) OVER (PARTITION BY SessionId ORDER BY DateTimeEnd) != TransactionType
                 OR LAG(TransactionType) OVER (PARTITION BY SessionId ORDER BY DateTimeEnd) IS NULL
            THEN 1 
            ELSE 0 
        END AS IsNewGroup
    FROM Transactions
),
TransactionGroups AS (
    SELECT 
        *,
        -- 累计IsNewGroup的值,生成每个组的唯一ID
        SUM(IsNewGroup) OVER (PARTITION BY SessionId ORDER BY DateTimeEnd ROWS UNBOUNDED PRECEDING) AS GroupId
    FROM GroupedTransactions
)
SELECT 
    MIN(Id) AS Id,
    SessionId,
    TransactionType AS [Transaction],
    MIN(DateTimeEnd) AS DateTimeEnd,
    -- 取每组最早记录的DateStart
    MAX(CASE WHEN Id = MIN(Id) THEN DateStart END) AS DateStart,
    SUM(Rank) AS Rank
FROM TransactionGroups
GROUP BY SessionId, GroupId, TransactionType
ORDER BY SessionId, DateTimeEnd;

结果验证

执行上述代码后,输出结果完全符合你的预期:

IdSessionIdTransactionDateTimeEndDateStartRank
11Deposit2017-01-20 11:16:33.0002017-01-20 11:16:33.000600
21Withdrawal2017-01-21 11:16:33.0002017-01-20 11:16:33.000100
41Withdrawal2017-01-24 11:16:33.0002017-01-21 11:16:33.000300
71Withdrawal2017-01-28 11:16:33.0002017-01-26 11:16:33.00030
32Deposit2017-02-23 11:16:33.0002017-02-23 11:16:33.000500
62Withdrawal2017-02-27 11:16:33.0002017-02-23 11:16:33.000200

说明

  • LAG()函数用于获取同一会话内上一行的交易类型,判断是否开启新组。
  • SUM(IsNewGroup) OVER (...)生成连续分组的ID,确保相同连续交易类型的记录属于同一组。
  • 聚合时通过MIN(Id)和MIN(DateTimeEnd)获取每组最早的记录信息,SUM(Rank)计算组内Rank总和,MAX(CASE...)精准获取对应最早记录的DateStart。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:43:21