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

请求修改PostgreSQL SQL语句:按周统计去重user_id而非按月

没问题!把统计维度从月改成周很简单,核心是调整日期分组的方式,同时保证同一user_id在单周内仅被统计一次。这里给你两种适配不同数据库的实用写法:

方法1:用EXTRACT拆分年和周(兼容PostgreSQL、MySQL等)

SELECT 
  COUNT(DISTINCT user_id) AS weekly_unique_users,
  EXTRACT(YEAR FROM created_at) AS year,
  EXTRACT(WEEK FROM created_at) AS week
FROM user_logins
WHERE created_at >= '2017-01-01' AND created_at <= '2018-04-10'
GROUP BY EXTRACT(YEAR FROM created_at), EXTRACT(WEEK FROM created_at)
ORDER BY year, week;

方法2:用to_char生成直观的年周标识(适合PostgreSQL等)

如果想要更易读的周格式(比如2017-01表示2017年第1周),可以用格式化函数:

SELECT 
  COUNT(DISTINCT user_id) AS weekly_unique_users,
  to_char(created_at, 'YYYY-IW') AS year_week  -- IW是ISO标准周,周一为周起始
FROM user_logins
WHERE created_at >= '2017-01-01' AND created_at <= '2018-04-10'
GROUP BY to_char(created_at, 'YYYY-IW')
ORDER BY year_week;

小提醒

  • 周定义差异:不同数据库的周计算逻辑可能不一样,比如MySQL的WEEK()函数可以通过参数指定周起始日(周日/周一)。如果需要严格遵循ISO标准周(每年第一周至少包含4天),优先用YYYY-IW这类格式或者对应数据库的ISO周函数。
  • 去重逻辑:COUNT(DISTINCT user_id)已经自动处理了单周内同一用户的重复记录,不用额外加子查询或者窗口函数。
  • 排序优化:按年+周排序能避免跨年周出现顺序混乱的问题,确保结果按时间先后展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:55:46