Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将间隔划分和聚合为桶_Sql_Database_Postgresql - Fatal编程技术网

Sql 将间隔划分和聚合为桶

Sql 将间隔划分和聚合为桶,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 ------------+--

我成功地使用PostgreSQL
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;