2016-04-12 19 views
1

Dies ist meine erste Frage hier, also lass es mich wissen, wenn ich nicht den Best Practices folge!Wie kann ich Werte in Buckets aufteilen und herausfinden, welcher Bucket einen Wert enthält?

Ich habe zwei Tabellen:.

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

und

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

Ich möchte wurde, welche der Schaufeln sehen können, meine Version fertig in den Versionen in Reihenfolge ausgeführt werden müssen, wie müssen Eimer. Um es mehr Spaß machen die Eimer können von mehreren Versionen nur verwendet werden, wenn sie einige time_allowed gelassen haben.

So, zum Beispiel für Version 1 (time_taken = 10), weiß ich, dass ich alle Bucket 1 (time_allowed = 5) und die Hälfte von Bucket 2 aufnehmen werde, mit 5 übrig. Ich habe jetzt 5 in Eimer 2 und kann beginnen, diesen Eimer mit Version 2 zu füllen.

Ich benutze Postgres im Moment und bin immer noch lernen die Seile so könnte wirklich mit einigen allgemeinen Ratschläge, wie man eine Struktur, dass würde hier helfen!

Entschuldigung, wenn dies vage ist!

+2

Bitte nehmen. http://stackoverflow.com/help/how-to-ask –

Antwort

0

Scheint so, als ob Sie kumulative Summen berechnen möchten, einfach mit Windowed Aggregate Functions von Standard SQL. Nach Abfrage liefert der abgedeckte Zeitbereich für jeden Eimer in Tabelle 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 

Sie tun das gleiche für Time_Taken in Tabelle # 1 und dann können Sie verbinden Ihre erwartete Ausgabe mit x between timeFrom and timeTo