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

按自定义起始日时分统计每月各状态企业数量(PostgreSQL)

按月份分组统计并指定查询月份的SQL实现

针对你的companies表,要实现按月份拆分结果并通过参数指定查询月份,可以用条件聚合结合日期函数来实现,同时支持参数化查询。

实现思路

  1. 用date_trunc('month', created_at)将created_at截断到月份级别,作为分组依据;
  2. 通过COUNT(CASE ...)的条件聚合方式,分别统计每个月内状态为Active和Blocked的公司数量;
  3. 用WHERE子句传入参数,精准筛选需要查询的月份。

具体SQL查询

-- 参数化查询,支持指定单个或多个月份
SELECT
    -- 取该月任意一条记录的时间戳(也可替换为date_trunc生成月初时间)
    MAX(created_at) AS created_at,
    COUNT(CASE WHEN status = 'Active' THEN 1 END) AS "Active",
    COUNT(CASE WHEN status = 'Blocked' THEN 1 END) AS "Blocked"
FROM companies
-- 筛选指定月份,参数可传入'2023-08'这类年月字符串或timestamp类型值
WHERE date_trunc('month', created_at) IN (
    date_trunc('month', $1::timestamp),
    date_trunc('month', $2::timestamp)
    -- 如需查询更多月份,继续添加参数即可
)
GROUP BY date_trunc('month', created_at)
ORDER BY date_trunc('month', created_at);

补充说明

  • 若只需查询单个月份,把IN子句改成= date_trunc('month', $1::timestamp)即可;
  • 如果希望created_at列统一显示当月第一天,可把MAX(created_at)替换为date_trunc('month', created_at)::timestamp,结果会是2023-08-01 00:00:00.000000这类格式;
  • $1、$2是PostgreSQL的参数占位符,实际使用时传入对应月份的日期值即可。

示例结果(指定2023年5、8、12月)

created_atActiveBlocked
2023-05-07 18:06:56.0000005113
2023-08-07 18:06:56.0000005432
2023-12-07 18:06:56.0000003535

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:55:02