如何将缺失的时间戳添加到 postgresql 中的数据中?

时间:2021-04-12 20:09:40

标签: database postgresql

类似于这个问题 - 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

我目前得到的数据是因为其他时间戳没有插入到数据库中。查询数据时如何添加缺失的?

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