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

带特殊条件的小计计算:汇总每笔IN交易后的OUT交易金额

需求实现方案

原始交易数据表

idflowamountdate
1IN1002023-08-01
2OUT1002023-08-02
3IN1002023-08-03
4OUT1002023-08-04
5OUT1002023-08-05

需求说明

对每一笔IN交易,汇总其发生之后的所有OUT交易的金额,期望输出结果如下:

目标输出表

idflowamountdateout_amount
1IN1002023-08-01100
3IN1002023-08-03200

实现方案(SQL示例)

以下是两种常用的实现方法,适用于主流关系型数据库:

方法1:关联子查询

逻辑直观,针对每一条IN交易,直接查询其之后所有OUT交易的金额总和:

SELECT 
    t1.id,
    t1.flow,
    t1.amount,
    t1.date,
    (SELECT SUM(t2.amount) 
     FROM transactions t2 
     WHERE t2.flow = 'OUT' 
       AND t2.date > t1.date) AS out_amount
FROM transactions t1
WHERE t1.flow = 'IN';

方法2:窗口函数(适用于MySQL 8.0+、PostgreSQL、SQL Server等)

先预计算OUT交易的倒序累计金额,再关联匹配到对应IN交易,数据量大时性能更优:

WITH out_transactions AS (
    SELECT 
        date,
        SUM(amount) OVER (ORDER BY date DESC) AS cumulative_out
    FROM transactions
    WHERE flow = 'OUT'
    ORDER BY date DESC
)
SELECT 
    t.id,
    t.flow,
    t.amount,
    t.date,
    COALESCE(MAX(ot.cumulative_out), 0) AS out_amount
FROM transactions t
LEFT JOIN out_transactions ot ON ot.date > t.date
WHERE t.flow = 'IN'
GROUP BY t.id, t.flow, t.amount, t.date
ORDER BY t.date;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 16:15:30