postgresql 按月份分组并计算当前月份和所有以前月份的行数

z0qdvdin  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(221)

PostgreSQL 13数据库
假设一个简化的表plans如下所示,可以假设每个月至少有一行,有时同一天有多行:
| id个|first_published_at|
| - -|- -|
| 小行星12345678910| 2022年10月1日03时58分55.118秒|
| abcd 1234 efg型|2022年10月3日03时42分55秒118秒|
| 日本高速数据处理机|2022年10月3日17时34分55.118秒|
| ASLB 83 nfys 5标准|2022年9月12日08:17:55.118|
我的简化查询:

SELECT TO_CHAR(plans.first_published_at, 'YYYY-MM') AS publication_date, COUNT(*)
FROM plans
WHERE plans.first_published_at IS NOT NULL
GROUP BY TO_CHAR(plans.first_published_at, 'YYYY-MM');

这将得到以下结果:
| publication_date| count|
| - -|- -|
| 2022年至10月|三个|
| 2022年至2009年|一个|
但我需要的10月份的结果是4
对于每个月,计数应该是本月和所有前几个月的总和。我将感谢任何关于如何处理这一问题的见解。

jslywgbw

jslywgbw1#

我将使用您的查询作为CTE,并运行一个使用累积sum作为window function的选择。

with t as
(
 SELECT TO_CHAR(plans.first_published_at, 'YYYY-MM') AS publication_date, 
        COUNT(*) AS cnt
 FROM plans
 WHERE plans.first_published_at IS NOT NULL
 GROUP BY publication_date
)
select publication_date, 
       sum(cnt) over (order by publication_date) as "count"
from t
order by publication_date desc;

DB fiddle上的演示

相关问题