我想从表中选择计数(*)12小时,并将结果分成这样的时间段:
time | count
00:00 - 03:00 | 12
03:00 - 06:00 | 25
etc...
我写了类似的东西:
select
timestamp,
row_number() over (partition by timestamp order by count(*) desc) as score
from logs
where to_timestamp(timestamp) between symmetric now() and now() - interval '12 hours'
group by timestamp
order by score desc;
但它在每个时间戳记录中分开:
timestamp | score
1466330486.813 | 25
如何正确统一时间段?
答案 0 :(得分:0)
如果您对每小时的分辨率感到满意,可以使用简单的分组和日期函数来解决这个问题:
SELECT
date_trunc('hour', timestamp),
count(*) as score
FROM logs
GROUP BY date_trunc('hour', timestamp);
date_trunc
文档is here。如果你需要自定义时间段(比如三小时块或相对于当前时间戳的三小时块),那么你可以编写一个自定义函数来计算它,并以相同的方式处理它。