将时间间隔划分和汇总到存储桶中

时间:2018-11-09 16:24:42

标签: sql database postgresql

我已成功使用PostgreSQL width_bucket(val, min, max, buckets)函数将数据集划分为相等大小的存储桶。但是我的数据包含以毫秒为单位的时间范围(start_timeend_time)。我正在寻找一种基于时间间隔将行包含到多个存储桶中的方法。

这是我现在所在位置的一个示例。每行都有开始和结束存储桶:

 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

如果只考虑单独地start_timeend_time ,我知道如何获得结果。有没有一种方法可以将我现在拥有的信息汇总到期望的结果中?

1 个答案:

答案 0 :(得分:3)

使用generate_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;