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

如何在PostgreSQL数据库中按日期分组数据?附示例数据

PostgreSQL按日期分组统计操作数据

看起来你想要对PostgreSQL里的用户操作数据按日期进行分组分析,结合你给出的示例数据,我整理了几个实用的SQL查询方案,帮你快速得到想要的统计结果~

你的示例数据

iduser_namedateaction
1user_12018-05-05start
2user_12018-05-05stop
3user_22018-05-05start
4user_22018-05-05stop
5user_12018-05-06start
6user_12018-05-06start
7user_12018-05-06stop
8user_22018-05-06start
9user_22018-05-06stop

方案1:按日期+用户分组,统计各操作类型数量

如果需要查看每天每个用户的start/stop操作次数,用这个查询:

SELECT 
    date,
    user_name,
    COUNT(CASE WHEN action = 'start' THEN 1 END) AS start_count,
    COUNT(CASE WHEN action = 'stop' THEN 1 END) AS stop_count,
    COUNT(*) AS total_actions
FROM your_table_name -- 替换成你的实际表名
GROUP BY date, user_name
ORDER BY date, user_name;

结果说明

  • 会按日期和用户名聚合数据,分别算出每个用户每天的start次数、stop次数,以及总操作数
  • ORDER BY让结果按日期和用户名排序,方便查看趋势

方案2:仅按日期分组,统计全量每日数据

如果只需要每天整体的操作统计(比如当天总共有多少次start、多少活跃用户),可以用这个:

SELECT 
    date,
    COUNT(CASE WHEN action = 'start' THEN 1 END) AS total_starts,
    COUNT(CASE WHEN action = 'stop' THEN 1 END) AS total_stops,
    COUNT(DISTINCT user_name) AS unique_active_users,
    COUNT(*) AS total_daily_actions
FROM your_table_name -- 替换成你的实际表名
GROUP BY date
ORDER BY date;

结果说明

  • 统计当天所有用户的启动/停止总次数,以及活跃用户数(去重后的用户数量)
  • 适合做每日运营数据汇总

补充:如果date字段是带时间戳的类型

如果你的date字段实际是timestamp或timestamptz类型(即包含具体时间),可以用DATE()函数提取纯日期部分来分组:

SELECT 
    DATE(date) AS action_date, -- 提取日期部分,忽略时分秒
    user_name,
    COUNT(CASE WHEN action = 'start' THEN 1 END) AS start_count
FROM your_table_name
GROUP BY DATE(date), user_name
ORDER BY action_date;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:41:05