Sql 将间隔划分和聚合为桶
我成功地使用PostgreSQLSql 将间隔划分和聚合为桶,sql,database,postgresql,Sql,Database,Postgresql,我成功地使用PostgreSQLwidth\u bucket(val,min,max,bucket)函数将我的数据集划分为大小相等的bucket。但是我的数据包含以毫秒为单位的时间范围(start\u time和end\u time)。我正在寻找一种基于时间间隔将行包含到多个bucket中的方法 这是我现在的一个例子。我为每行设置了起始桶和结束桶: start_time | end_time | start_bucket | end_bucket ------------+--
width\u bucket(val,min,max,bucket)
函数将我的数据集划分为大小相等的bucket。但是我的数据包含以毫秒为单位的时间范围(start\u time
和end\u time
)。我正在寻找一种基于时间间隔将行包含到多个bucket中的方法
这是我现在的一个例子。我为每行设置了起始桶和结束桶:
start_time | end_time | start_bucket | end_bucket
------------+----------------+--------------+------------
0 | 492 | 1 | 1
404 | 580 | 1 | 1
0 | 628 | 1 | 1
560 | 740 | 1 | 2
644 | 720 | 1 | 2
24 | 160 | 1 | 1
0 | 88 | 1 | 1
640 | 1268 | 1 | 2
556 | 716 | 1 | 1
0 | 2086 | 1 | 3
我正在寻找一个汇总结果:
bucket | count
------------+---------------
1 | 10
2 | 4
3 | 1
如果我只考虑开始时间
或结束时间
,我知道如何实现结果。有没有办法将我现在拥有的信息聚合到所需的结果中?使用生成\u series()
:
select gs.bucket, count(*)
from t cross join lateral
generate_series(t.start_bucket, t.end_bucket) as gs(bucket)
group by gs.bucket
order by 1;