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

PostgreSQL如何查询列累加和达到指定值的所有对应行记录

解决思路

核心逻辑是按时间升序取目标用户的所有入账记录(coins>0,负数为扣减记录无需参与抵扣计算),滚动计算累计入账金额,只要上一次的累计金额小于待消耗值,当前记录就需要纳入返回结果,直到累计金额覆盖待消耗值为止。

适配PostgreSQL的实现方案

你可以直接使用下面的SQL,将UUID42替换为目标用户ID,:consume_amount替换为实际要消耗的coins数值即可:

WITH running_cal AS (
    SELECT 
        id, coins, value,
        SUM(coins) OVER (ORDER BY created) AS running_total,
        COALESCE(LAG(SUM(coins)) OVER (ORDER BY created), 0) AS prev_running
    FROM t
    WHERE user_id = 'UUID42' 
      AND coins > 0
)
SELECT id, coins, value
FROM running_cal
WHERE prev_running < :consume_amount;

效果验证

用你给出的测试场景验证:

  • 消耗1coins:仅返回UUID3,符合要求
  • 消耗49coins:仅返回UUID3,符合要求
  • 消耗100coins:返回UUID3、UUID5、UUID6,符合要求

如果需要兼容其他数据库,只需要调整窗口函数的语法即可,核心逻辑通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:00:03