选择具有分区时间戳的查询

时间:2016-06-19 12:27:06

标签: sql database postgresql timestamp

我想从表中选择计数(*)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

如何正确统一时间段?

1 个答案:

答案 0 :(得分:0)

如果您对每小时的分辨率感到满意,可以使用简单的分组和日期函数来解决这个问题:

SELECT
  date_trunc('hour', timestamp),
  count(*) as score
FROM logs
GROUP BY date_trunc('hour', timestamp);

date_trunc文档is here。如果你需要自定义时间段(比如三小时块或相对于当前时间戳的三小时块),那么你可以编写一个自定义函数来计算它,并以相同的方式处理它。