2017-08-30 37 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是PostgreSQL的 – blue

+0

所以要保留所有的行,但得到了'sum_quantity'与同'shop_id'和'package_id'加起来的前几天,是否正确? – 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()用作window function(通过over()部分)。窗口定义中的order by使得这是“运行”总和,而不是“总体”总和。

在线例如:http://rextester.com/ZOSK13092