如何在postgresql中获取每月的日期数据

Dar*_*999 3 postgresql

我使用 psql v.10.5

我有一个像这样的结构表:

|     date      | total |
-------------------------
|  01-01-2018   |   50  |
|  05-01-2018   |   90  |
|  30-01-2018   |   20  |
Run Code Online (Sandbox Code Playgroud)

如何按月获取回顾数据,但数据显示连续 30 天,我希望数据显示如下:

|     date      | total |
-------------------------
|  01-01-2018   |   50  |
|  02-01-2018   |   0   |
|  03-01-2018   |   0   |
|  04-01-2018   |   0   |
|  05-01-2018   |   90  |
.....
|  29-01-2018   |   0   |
|  30-01-2018   |   20  |
Run Code Online (Sandbox Code Playgroud)

我试过这个查询:

SELECT * FROM date
WHERE EXTRACT(month FROM "date") = 1  // dynamically
AND EXTRACT(year FROM "date") = 2018  // dynamically
Run Code Online (Sandbox Code Playgroud)

但结果不是我所期望的。还有我动态创建的月份和日期的参数。

任何帮助将不胜感激

kli*_*lin 5

使用函数generate_series(start, stop, step interval),例如:

select d::date, coalesce(total, 0) as total
from generate_series('2018-01-01', '2018-01-31', '1 day'::interval) d
left join my_table t on d::date = t.date
Run Code Online (Sandbox Code Playgroud)

rextester 中的工作示例。

  • 要添加到上面的答案+1,这是使用 _calendar_ 表的示例,其中包含您想要在报告中显示的所有日期,即使所有日期都没有出现在您的实际数据中。 (3认同)