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

如何用SQL按间隔天数统计购买用户数及按天数区间分组统计

SQL查询实现方案

1. 按间隔天数统计购买用户数

直接通过分组统计间隔天数对应的去重用户数,为了匹配示例中0天计数为0的要求,我们先定义需要展示的天数列表,再通过左关联统计:

WITH user_diff AS (
    SELECT DISTINCT 
        c.EMAIL, 
        DATEDIFF(day,c.action_date,c.ORDER_CREATED_DATE) as diff
    FROM Customers c
),
-- 此处可根据实际需要调整要展示的天数列表
target_days AS (
    SELECT 0 AS day
    UNION ALL SELECT 2
    UNION ALL SELECT 18
    UNION ALL SELECT 60
)
SELECT 
    t.day,
    COUNT(DISTINCT u.EMAIL) AS email_count
FROM target_days t
LEFT JOIN user_diff u ON t.day = u.diff
GROUP BY t.day
ORDER BY t.day

如果不需要固定展示没有数据的天数,直接分组统计即可:

SELECT 
    diff AS day,
    COUNT(DISTINCT EMAIL) AS email_count
FROM (
    SELECT DISTINCT 
        c.EMAIL, 
        DATEDIFF(day,c.action_date,c.ORDER_CREATED_DATE) as diff
    FROM Customers c
) t
GROUP BY diff
ORDER BY diff

2. 按间隔天数区间统计购买用户数

先定义需要统计的区间规则,再通过左关联实现无数据区间计数为0,完全匹配示例输出:

WITH user_diff AS (
    SELECT DISTINCT 
        c.EMAIL, 
        DATEDIFF(day,c.action_date,c.ORDER_CREATED_DATE) as diff
    FROM Customers c
),
-- 此处可根据实际需要调整统计区间规则
stat_ranges AS (
    SELECT '0-7' AS day, 0 AS min_diff, 7 AS max_diff
    UNION ALL SELECT '7-14', 7, 14
    UNION ALL SELECT '14-28', 14, 28
)
SELECT 
    s.day,
    COUNT(DISTINCT u.EMAIL) AS email_count
FROM stat_ranges s
LEFT JOIN user_diff u ON u.diff >= s.min_diff AND u.diff < s.max_diff
GROUP BY s.day
ORDER BY s.min_diff

以上SQL兼容大部分支持CTE语法的数据库(MySQL 8.0+、PostgreSQL、SQL Server等),如果使用不支持CTE的低版本数据库,把CTE部分改写为子查询即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:45:01