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

如何在SQL Server中筛选后续无退货记录的交易数据

SQL Server 查询:筛选后续无紧邻退货记录的交易数据

需求说明

需要从交易数据表中筛选出**后续紧跟的记录不是退货(Return)**的交易,需过滤掉那些后面紧邻退货的记录(示例中的第2、4条记录)。

数据示例

以下是测试数据的插入语句,其中加粗的记录为需要过滤的条目:

INSERT INTO Table1
    (acct_name, id_no, cube_id, accnt_number, Tran_Dt, Post_Dt, Description, Trcd, Amt)
VALUES
    ('TEST1', 2607269, 299933445, 1999957778, '2023-04-05 00:00:00', '2023-04-05 00:00:00', 'ITEM RETURN', 'R9P', '700-01-01 00:00:00'),
    **('TEST1', 1965041, 299933445, 1999957778, '2023-04-05 00:00:00', '2023-04-05 00:00:00', 'CASHBACK XFR', 'W8', '700-01-01 00:00:00'),**
    ('TEST2', 2607269, 288833446, 2999957776, '2023-04-06 00:00:00', '2023-04-06 00:00:00', 'ITEM RETURN', 'R9P', '900-01-01 00:00:00'),
    **('TEST2', 2607269, 288833446, 2999957776, '2023-04-06 00:00:00', '2023-04-06 00:00:00', 'CASHBACK XFR', 'W8', '900-01-01 00:00:00'),**
    ('TEST3', 3607867, 199929599, 8779597774, '2023-04-06 00:00:00', '2023-04-06 00:00:00', 'WEBXFR  PYMT', 'W8', '400-01-01 00:00:00')
;

期望输出

('TEST1', 2607269, 299933445, 1999957778, '2023-04-05 00:00:00', '2023-04-05 00:00:00', 'ITEM RETURN', 'R9P', '700-01-01 00:00:00'),     
('TEST2', 2607269, 288833446, 2999957776, '2023-04-06 00:00:00', '2023-04-06 00:00:00', 'ITEM RETURN', 'R9P', '900-01-01 00:00:00'),
('TEST3', 3607867, 199929599, 8779597774, '2023-04-06 00:00:00', '2023-04-06 00:00:00', 'WEBXFR  PYMT', 'W8', '400-01-01 00:00:00')
;

解决方案

使用SQL Server的LEAD()窗口函数,获取每条记录的下一条交易的描述信息,然后筛选出下一条记录不是退货,或者是最后一条无后续记录的交易。排序逻辑按账户+交易日期组合,确保后续记录是同一账户的紧邻交易。

查询代码

WITH ranked_transactions AS (
    SELECT 
        *,
        -- 获取下一条记录的描述,按账户+交易日期排序
        LEAD(Description) OVER (
            PARTITION BY acct_name, accnt_number 
            ORDER BY Tran_Dt, Post_Dt
        ) AS next_tran_description
    FROM Table1
)
SELECT 
    acct_name, id_no, cube_id, accnt_number, Tran_Dt, Post_Dt, Description, Trcd, Amt
FROM ranked_transactions
-- 保留无后续记录的交易,或后续记录不是退货的交易
WHERE next_tran_description IS NULL 
   OR next_tran_description NOT LIKE '%RETURN%';

逻辑说明

  • PARTITION BY acct_name, accnt_number:按账户分组,仅对比同一账户内的交易顺序
  • ORDER BY Tran_Dt, Post_Dt:按交易日期、记账日期排序,确定交易的先后顺序
  • LEAD(Description):获取当前记录的下一条交易描述
  • 筛选条件覆盖两种合法场景:无后续记录的交易,以及后续记录非退货的交易

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:43:08