1

これはここでの最初の質問です。ベスト プラクティスに従っていない場合はお知らせください。

私は2つのテーブルを持っています:

+---------+------------+--+
| 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を使用しており、まだロープを学んでいるので、ここで役立つ構造を作成する方法に関する一般的なアドバイスを実際に行うことができます!

これが曖昧である場合は申し訳ありません!

4

1 に答える 1

0

Standard 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

テーブル#1で同じことを行うTime_Takenと、次を使用して参加できますx between timeFrom and timeTo

于 2016-04-12T17:34:49.397 に答える