PostgreSQL 选择最近 30 天的结果

Ric*_*h_F 2 postgresql select

我需要PostgreSQL 过去 30 天的报告,其中某些日子可能没有条目。所以上周二可能没有任何记录。星期三可能有 8 条记录。

这将进入条形图,因此需要过去 30 天的每一天。只靠数据库,有没有办法强制一个最近30天的结果,加上对应的结果值,即使是nil?我必须将最后一个设置为 0。现在我的结果只显示了 16 天。

我想我必须迭代结果Ruby以获得我正在寻找的数据集。我试图依靠数据库而不是在外面运行以进行进一步处理。

SELECT DISTINCT creation_date::date as myday, count(id)
FROM queries
GROUP BY myday
ORDER BY myday DESC
LIMIT 30 
Run Code Online (Sandbox Code Playgroud)

bog*_*ron 8

您可能想尝试使用 generate_series 首先获取从 0 到 29 的计数器,然后使用左外连接,请尝试以下操作(注意,了解您正在使用的表会很有帮助):

SELECT a."TheDate", COALESCE(b."recs", 0)
FROM
(
SELECT CURRENT_DATE - i "TheDate"
    FROM generate_series(0, 29) i
) a
LEFT OUTER JOIN (
SELECT "TheDate", COUNT(*) "recs"
    FROM "Records"
    WHERE "TheDate" > (CURRENT_DATE - INTERVAL '30 DAY')::DATE
    GROUP BY "TheDate" 
)b ON a."TheDate"=b."TheDate"
Run Code Online (Sandbox Code Playgroud)