这是我在这里的第一个问题,所以如果我没有遵循最佳实践,请告诉我!
我有两张桌子:
+---------+------------+--+
| 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
加入