如何将值分配到bucket中,并找到哪个bucket包含值



这是我在这里的第一个问题,所以如果我没有遵循最佳实践,请告诉我!

我有两张桌子:

+---------+------------+--+
| Version | Time_Taken |  |
| 1       | 10         |  |
| 2       | 15         |  |
| 3       | 20         |  |
+---------+------------+--+

+--------+--------------+--+
| Bucket | Time_Allowed |  |
+--------+--------------+--+
|      1 |            5 |  |
|      2 |           10 |  |
|      3 |           10 |  |
|      4 |           10 |  |
|      5 |           10 |  |
+--------+--------------+--+

我想看看我的版本是在哪个Buckets中完成的。版本必须按顺序完成,Buckets也必须按顺序。为了让它更有趣,只有在还剩下一些时间的情况下,多个版本才能使用bucket。

因此,对于版本1(time_taken=10),例如,我知道我将占用Bucket 1的全部(time_allowed=5)和Bucket 2的一半,剩下5个。我现在在bucket 2中还有5个,可以开始用Version2填充这个bucket了。

我现在正在使用postgres,并且仍在学习诀窍,所以可以就如何创建一个对这里有帮助的结构提供一些一般性建议!

如果这是模糊的,请道歉!

似乎您想要计算累积和,使用标准SQL的窗口聚合函数很容易。以下查询返回表#2中每个bucket的覆盖时间范围:

select *, 
   sum(Time_Allowed) 
   over (order by Bucket
         rows unbounded preceding) - Time_Allowed AS timeFrom,
   sum(Time_Allowed) 
   over (order by Bucket
         rows unbounded preceding) AS timeTo
from tab2

对表#1中的Time_Taken执行相同操作,然后可以使用x between timeFrom and timeTo 加入

相关内容

  • 没有找到相关文章

最新更新