类似于这个问题 - Postgres - how to return rows with 0 count for missing data?
我有一个表格来记录每天使用我的服务的用户数量。我通过时间戳和用户 ID 记录它。 当前查询 -
SELECT DATE_TRUNC('day', recorded_at), COUNT(log_id) AS daily_count FROM uses_tracker
WHERE log_id = 15183 AND recorded_at >= now() - INTERVAL '30 DAYS' GROUP BY 1
它以这种格式返回数据 -
date_trunc daily_count
2021-04-01 00:00:00.000000 2
2021-04-06 00:00:00.000000 1
预期格式 -
date_trunc daily_count
2021-04-01 00:00:00.000000 2
2021-04-02 00:00:00.000000 0
2021-04-03 00:00:00.000000 0
2021-04-04 00:00:00.000000 0
2021-04-05 00:00:00.000000 0
2021-04-06 00:00:00.000000 1
我目前得到的数据是因为其他时间戳没有插入到数据库中。查询数据时如何添加缺失的?
答案 0 :(得分:3)
您可以生成过去 30 天的一系列日期,然后在该系列的日期加入您的表格并进行计数。尝试类似
SELECT date, COUNT(ut.log_id) AS daily_count
FROM (
SELECT date_trunc('day', dd)::date as date
FROM generate_series
( now() - INTERVAL '30 DAYS'
, now()
, '1 day'::interval) dd
) dates
LEFT JOIN uses_tracker ut on ut.recorded_at::date = dates.date
GROUP BY 1