如何使用postgresql按日期查询每小时聚合数据?

时间:2017-11-10 13:13:34

标签: postgresql

有一张桌子:

ID DATE 
1  2017-09-16 20:12:48
2  2017-09-16 20:38:54
3  2017-09-16 23:58:01
4  2017-09-17 00:24:48
5  2017-09-17 00:26:42
..

我需要的结果是过去7天的每小时聚合行数的数据:

COUNT DATE
2     2017-09-16 21:00:00
0     2017-09-16 22:00:00
0     2017-09-16 23:00:00
1     2017-09-17 00:00:00
2     2017-09-17 01:00:00
..

我尝试使用EXTRACT,DISTINCT和使用generate_series函数(类似stackoverflow问题的大多数东西)不同的东西

这次尝试是目前最好的:

SELECT 
  date_trunc('hour', demotime) as date,
  COUNT(demotime) as count
FROM demo
GROUP BY date

如何生成7天的每小时系列并填写行数?

1 个答案:

答案 0 :(得分:3)

SQL DEMO

SELECT dd, count("demotime")     
FROM generate_series
        ( current_date - interval '7 days'
        , current_date 
        , '1 hour'::interval) dd
LEFT JOIN Table1        
  ON dd = date_trunc('hour', demotime)        
GROUP BY dd;

从现在开始工作 - 7天:

SELECT dd, count("demotime")     
FROM generate_series
        ( date_trunc('hour', NOW()) - interval '7 days'
        , date_trunc('hour', NOW())
        , '1 hour'::interval) dd
LEFT JOIN Table1        
  ON dd = date_trunc('hour', demotime)        
GROUP BY dd;