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

PostgreSQL中统计每个客户有记录的天数

统计每个客户存在记录的天数(PostgreSQL实现方案)

这个需求在PostgreSQL里实现起来很直观,核心思路就是把每条记录的时间戳归到对应的日期维度,再按客户去重统计不同日期的数量。

核心SQL代码

SELECT
    customer_id,
    COUNT(DISTINCT created_at::date) AS active_days
FROM
    your_table_name  -- 替换成你的实际表名
GROUP BY
    customer_id
ORDER BY
    customer_id;

代码细节解释

  • created_at::date:把带时区的时间戳转换为日期类型(PostgreSQL会自动处理时区逻辑,你的数据是+00时区,直接转成UTC日期即可)。如果需要按特定时区统计日期,可以改成created_at AT TIME ZONE 'Asia/Shanghai'::date这类写法,替换成你需要的时区标识。
  • COUNT(DISTINCT ...):对每个客户的日期做去重后计数,这样同一天内的多条重复记录只会被统计1次,完美匹配“存在记录的天数”需求。
  • GROUP BY customer_id:按客户ID分组,确保每个客户只输出一行统计结果,清晰对应到单个客户的活跃天数。

结合你的示例数据验证

用你提供的测试数据运行上述SQL,会得到如下结果:

customer_idactive_days
10004
10013
10022

对应每个客户的天数逻辑:

  • 1000:记录分布在2017-12-29、2017-12-30、2018-01-02、2018-01-03,共4天
  • 1001:记录分布在2017-12-30、2018-01-02、2018-01-03,共3天
  • 1002:记录分布在2017-12-30、2018-01-02,共2天(同一天内的两条记录只算1天)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:08:34