如何使用Postgresql生成月报(两个日期之间)

如何使用Postgresql生成月报(两个日期之间),postgresql,Postgresql,我目前正在开发一个web应用程序(NodeJS),它有一个条形图,指示每月完成的销售数量 我有一个表,其中包含id、job\u name、date\u completed和status列(前两列似乎与这个问题无关) 我希望能够查询两个值(例如2020-01-01[2020年1月]至2020-12-01[2020年12月])之间每月完成的作业数,条件是它将仅统计状态值为“1”(1=完成,0=正在进行)的作业数,查询生成此表: ----------+----------------------- 月

我目前正在开发一个web应用程序(NodeJS),它有一个条形图,指示每月完成的销售数量

我有一个表,其中包含id、job\u name、date\u completed和status列(前两列似乎与这个问题无关)

我希望能够查询两个值(例如2020-01-01[2020年1月]至2020-12-01[2020年12月])之间每月完成的作业数,条件是它将仅统计状态值为“1”(1=完成,0=正在进行)的作业数,查询生成此表:

----------+-----------------------

月数|完成工作

2020年1月3日

2020年2月1日

2020年3月5日

2020年12月3日

---------+-------------------------

我将使用node.js/pg node将数据转换为json

我看过generate_series和row_to_json/json_agg,但对如何使这个查询工作感到困惑

谢谢大家!

SELECT 
    MONTH(tbl.date_completed) as month,
    COUNT(tbl.staus) as jobs
FROM yourTable tbl
WHERE
    tbl.date_completed BETWEEN CAST ('2020-01-01' AS DATE) AND CAST ('2020-12-01' AS DATE)
    AND
    status = 1
GROUP BY MONTH(tbl.date_completed)

这应该可以工作,但没有经过测试。

postgres中没有
MONTH()
函数。也许可以尝试
提取(从tbl.date\u完成的月份)
工作?嗨,nodir.dev,工作正常谢谢!我使用了您的查询+建议的提取(月…)功能,它返回了数据,尽管如果我可以请求其他帮助,我也希望显示两个日期之间的月份,即使它的返回值为0,例如(范围为2020年1月-2020年12月)--(月作业)(1 | 0)(2 | 7)(3 | 0)。。(12 | 3)谢谢!我认为将
COUNT
更改为
SUM
并删除
和status=1
将完全符合您的要求want@nodir.dev不幸的是,它没有起作用,它仍然只生成有价值的月份,而忽略了没有价值的月份。我在之前的一些问题上取得了进展,比如其他月份复制了最高值,而没有显示自己的值和月份顺序。我做了一把db小提琴,希望你能帮助我,谢谢!小提琴: