我在以下(简化)结构中有一个登录表:
id | login_time
---------
1 | 2019-02-04 18:14:30.026361+00
2 | 2019-02-04 22:10:19.720065+00
3 | 2019-02-06 15:51:53.799014+00
现在我想生成这样的图表:
基本上我想显示过去 48 小时内的登录信息。
我目前的查询:
SELECT count(*), date_trunc('hour', login_time) as time_trunced FROM user_logins
WHERE login_time > now() - interval '48' hour
GROUP BY time_trunced
ORDER BY time_trunced DESC
只要每小时都有条目,这就会起作用。但是,如果在某个小时内没有登录,则不会选择任何条目,如下所示:
time_trunced | count
---------------------
12:00 | 1
13:00 | 2
15:00 | 3
16:00 | 5
我需要一个连续查询,这样我就可以简单地将计数值放入一个数组中:
time_trunced | count
---------------------
12:00 | 1
13:00 | 2
14:00 | 0 <-- This is missing
15:00 | 3
16:00 | 5
基于此,我可以简单地将查询结果转换为类似的数组[1, 2, 0, 3, 5]并将其传递给我的前端。
这对postgresql有可能吗?还是我需要实现自己的逻辑?