2016-04-12 28 views
1

这是我在这里的第一个问题,所以请让我知道,如果我不遵循最佳做法!如何将值分配给存储区并查找哪个存储区包含值?

我有两个表:

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

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

我希望能够看到该桶的我的版本是在完成版本必须按顺序完成,必须铲斗。为了使它更有趣,只有他们有一些time_allowed左边,桶才能被多个版本使用。例如,对于版本1(time_taken = 10),我知道我将占用桶1(time_allowed = 5)和桶2的一半,剩下5个。我现在在第2桶中剩下5个,并且可以开始用第2版填充该桶。

我现在正在使用postgres,并且仍在学习绳索,因此可以真正处理一些关于如何创建结构的一般性建议会在这里帮助!

道歉,如果这是模糊的!

+2

请注明您预期的输出。 http://stackoverflow.com/help/how-to-ask –

回答

0

好像你想要计算累计和,可以很容易地使用标准SQL的Windowed Aggregate Functions。以下查询返回表#2每个桶覆盖的时间段:

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 

你做Time_Taken同一表#1,那么你就可以加入使用x between timeFrom and timeTo