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问题修正
- 删除了无效判断
"orderNumber" != NULL,SQL中NULL值的比较必须使用IS NULL/IS NOT NULL,!= NULL的返回结果永远为未知,不会命中任何记录 - 替换了原有的总记录数统计逻辑,改为按去重日期统计,避免了同一日期多条记录被重复计数的问题
用你提供的样本数据执行上述查询,就可以得到你期望的仅11月命中的输出结果。
内容的提问来源于stack exchange,提问作者aroundtheworld
相关产品推荐
相关产品推荐

