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

计算每日销量变化及新增销售人员统计需求

实现符合要求的每日销量变化统计

我来帮你搞定这个销量统计需求,核心逻辑是仅针对前一日已有销售记录的人员计算总销量变化,同时要正确处理新销售的首日数据(比如Sheila8/3的销量不计入当日统计,但次日计算变化时要用上)。下面用SQL给出完整实现方案:

核心规则回顾

  • 起始日2016-08-01因无前置销售数据,当日销量变化为0
  • 新销售(如Sheila在8/3首次销售)的当日销量不计入当日统计,但次日计算变化时需包含该销售前一日的销量
  • 每日销量变化 = 当日符合条件人员的总销量 - 这些人员前一日的总销量

SQL实现代码

WITH daily_person_sales AS (
    -- 基础销售数据,提取每个人员每日的销量
    SELECT Person, Date, Qty FROM SALES
),
daily_qualified_persons AS (
    -- 筛选出当日符合条件的人员:前一日有销售记录的人员
    SELECT
        curr.Date,
        curr.Person
    FROM daily_person_sales curr
    WHERE EXISTS (
        SELECT 1
        FROM daily_person_sales prev
        WHERE prev.Person = curr.Person
          AND prev.Date = curr.Date - INTERVAL '1 day'
    )
    -- 手动加入起始日的空记录,确保起始日被统计
    UNION ALL
    SELECT '2016-08-01'::DATE, NULL
),
daily_current_total AS (
    -- 计算每日符合条件人员的当日总销量
    SELECT
        Date,
        COALESCE(SUM(Qty), 0) AS current_total
    FROM daily_qualified_persons dqp
    LEFT JOIN daily_person_sales dps
        ON dqp.Date = dps.Date AND dqp.Person = dps.Person
    GROUP BY Date
),
daily_prev_total AS (
    -- 计算每日符合条件人员的前一日总销量
    SELECT
        dqp.Date,
        COALESCE(SUM(dps.Qty), 0) AS prev_total
    FROM daily_qualified_persons dqp
    LEFT JOIN daily_person_sales dps
        ON dqp.Person = dps.Person AND dps.Date = dqp.Date - INTERVAL '1 day'
    GROUP BY Date
)
-- 最终计算每日销量变化
SELECT
    dct.Date,
    dct.current_total AS 当日符合条件人员总销量,
    dpt.prev_total AS 前一日对应人员总销量,
    CASE
        WHEN dct.Date = '2016-08-01'::DATE THEN 0
        ELSE dct.current_total - dpt.prev_total
    END AS 销量变化
FROM daily_current_total dct
JOIN daily_prev_total dpt ON dct.Date = dpt.Date
ORDER BY dct.Date;

关键逻辑解释

  1. daily_qualified_persons:通过EXISTS子查询筛选出前一日有销售记录的人员,确保只有符合条件的人员被纳入统计;同时手动加入起始日的空记录,保证起始日能被正常输出。
  2. daily_current_total:左连接基础销售数据,计算当日符合条件人员的总销量,无数据时用COALESCE填充为0。
  3. daily_prev_total:同样左连接基础数据,但关联的是前一日的销量,这样就能拿到符合条件人员前一日的总销量,为计算变化量做准备。
  4. 最终计算:起始日直接设变化量为0,其他日期用当日总销量减去前一日对应人员的总销量,得到准确的销量变化。

举个例子看Sheila的处理:

  • 8/3:Sheila首次销售,前一日(8/2)无她的记录,所以她不在当日符合条件人员中,8/3的总销量不计入她的9单位。
  • 8/4:Sheila前一日(8/3)有销售记录,被纳入符合条件人员,当日总销量包含她8/4的销量,同时计算变化量时会用上她8/3的9单位数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:09:44