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

如何用PostgreSQL实现按客户取最近3条统计值为0的记录数

PostgreSQL 按客户最近3条交易筛选实现方案

核心实现逻辑

  • 首先对每个客户的交易记录按交易日期倒序排序,筛选出每个客户的最近3条交易
  • 统计这3条记录中Value等于0的条数
  • 过滤出条数≥3的客户,再关联客户表获取客户的Name等信息
  • 如果同一个客户存在多条相同日期的交易,建议使用ROW_NUMBER()而非RANK(),避免排名重复导致取到超过3条记录的问题

可直接运行的查询代码

WITH ranked_transactions AS (
    -- 给每个客户的交易按日期倒序排名
    SELECT 
        Customer,
        Value,
        ROW_NUMBER() OVER (PARTITION BY Customer ORDER BY Date DESC) AS rn
    FROM 交易表
),
customer_zero_count AS (
    -- 统计每个客户最近3条交易中Value=0的数量
    SELECT 
        Customer,
        COUNT(*) AS zero_count
    FROM ranked_transactions
    WHERE rn <= 3 AND Value = 0
    GROUP BY Customer
    HAVING COUNT(*) >= 3
)
-- 关联客户表获取完整客户信息
SELECT 
    c.Key AS 客户唯一标识,
    c.Name AS 客户名称,
    cz.zero_count AS 近3笔交易零值数量
FROM 客户表 c
JOIN customer_zero_count cz ON c.Key = cz.Customer;

特殊场景适配说明

如果你的业务允许同一个客户相同日期的多条交易都算入最近3条统计范围,可以把ROW_NUMBER()替换为RANK()或者DENSE_RANK(),根据实际业务规则调整即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:39:02