2017-08-30 20 views
1

私は下の表を持っている:SQL:合計以前のすべてのグループ化された行

date  | shop_id | package_id | quantity 
01/01/2017 | 1  | 1  | 1 
01/01/2017 | 1  | 2  | 5 
01/01/2017 | 2  | 1  | 10 
01/01/2017 | 2  | 2  | 4 
02/01/2017 | 1  | 1  | 14 
02/01/2017 | 1  | 2  | 3 
    .... 

私は、次の

date  | shop_id | package_id | sum_quantity 
01/01/2017 | 1  | 1  | 1 
01/01/2017 | 1  | 2  | 5 
01/01/2017 | 2  | 1  | 10 
01/01/2017 | 2  | 2  | 4 
02/01/2017 | 1  | 1  | 15 
02/01/2017 | 1  | 2  | 8 

    .... 
のように同じお店と同じパッケージを持つすべての以前の記録、の量を合計します
+0

DBMSはそうあなたが正しい、すべての行を保持しますが、同じ 'shop_id'と' package_id'が前の日までの追加と 'sum_quantity'を取得したいのpostgresql – blue

+0

のですか? – RealCheeseLord

+0

@RealCheeseLordはい – blue

答えて

3

これはshop_idとPACKAGE_IDに基づいて、 "実行中の合計" である:

select "date", shop_id, package_id, 
     sum(quantity) over (partition by shop_id, package_id order by "date") as sum_quantity 
from the_table 
order by "date"; 

sum()を012として使用されています(over()部分を介して)。ウィンドウ定義内のorder byは、これを「全体的な」合計ではなく「実行中の」合計にします。

オンライン例:http://rextester.com/ZOSK13092

関連する問題