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

Postgres中DISTINCT与GROUP BY结合实现按月统计不同日期数量问题

Postgres按月内去重日期筛选月份的实现方法

你的需求完全可以在Postgres中实现,使用COUNT(DISTINCT)语法即可按日期去重统计数量,修正后的查询语句如下:

SELECT 
  DATE_PART('month', "orderDate") AS month, 
  COUNT(DISTINCT DATE("orderDate")) AS count
FROM public."Orders"
WHERE 
  "companyId" = 00001 
  AND "orderNumber" != 1 
  AND "orderNumber" IS NOT NULL
  AND DATE_PART('year', "orderDate") = '2020'
GROUP BY month
HAVING COUNT(DISTINCT DATE("orderDate")) >= 2

核心逻辑说明

  • DATE("orderDate")会把带时分秒的时间戳转换为仅包含年月日的日期类型,消除同一天不同时间的差异
  • COUNT(DISTINCT DATE("orderDate"))会统计每个月内不重复的日期数量,正好满足你按日期去重的统计需求
  • HAVING子句判断去重后的日期数量≥2,筛选出符合要求的月份

原有SQL问题修正

  1. 删除了无效判断"orderNumber" != NULL,SQL中NULL值的比较必须使用IS NULL/IS NOT NULL,!= NULL的返回结果永远为未知,不会命中任何记录
  2. 替换了原有的总记录数统计逻辑,改为按去重日期统计,避免了同一日期多条记录被重复计数的问题

用你提供的样本数据执行上述查询,就可以得到你期望的仅11月命中的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:54:02