sql - 如何使用 PostgreSQL 进行条件求和?

标签 sql postgresql

我有下表:

ID  Quantity     date
100    20     1-NOV-15
100    30     1-OCT-15
100    10     1-OCT-15
100    5      1-AUG-15
101    4      1-AUG-15

我想对每个 ID 的所有 Quantity 求和,直到与 ID 关联的 Date 意味着我想要得到这个:

ID  Quantity     Date      sum
100    20     1-NOV-15      65       // sum all ID 100 till 1-NOV-15
100    30     1-OCT-15      45       // sum all ID 100 till 1-OCT-15
100    10     1-OCT-15      45       // sum all ID 100 till 1-OCT-15
100    5      1-AUG-15       5       // sum all ID 100 till 1-AUG-15
101    4      1-AUG-15       4       // sum all ID 101 till 1-AUG-15

我无法获得此结果。这是我写的:

Select ID,Date,SUM(Quantity)
From a
Group by ID,Date
order by ID

我不知道如何告诉 SUM 传递所有具有相同 ID 且它们的 Date 较小的记录.

最佳答案

您需要累计或运行总和。

Select ID, Date, SUM(Quantity) OVER (PARTITION BY ID ORDER BY DATE)
From a;

编辑:

默认框架选项是 range between unbounded preceding and current row 而不是 rows between unbounded preceding and current row。如果您使用后者,结果将更像是:

ID  Quantity     Date      sum
100    20     1-NOV-15      65       // sum all ID 100 till 1-NOV-15
100    30     1-OCT-15      45       // sum all ID 100 till 1-OCT-15
100    10     1-OCT-15      15       // sum all ID 100 till 1-OCT-15
100    5      1-AUG-15       5       // sum all ID 100 till 1-AUG-15
101    4      1-AUG-15       4       // sum all ID 101 till 1-AUG-15

但是,默认值适用于此问题。

关于sql - 如何使用 PostgreSQL 进行条件求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31113675/

相关文章:

php - 无法将图像和文本发布到数据库。接收无错误

sql - 嵌套查询: best practices

postgresql - 我怎样才能得到 pg_regress?

sql - Spring Data JPA Native Query - 如何使用 Postgres ARRAY 类型作为参数

sql - Postgresql正则表达式匹配函数: regexp_matches

mysql - 根据给定数组的顺序对选定的键进行排序

mysql - SQL 连接以添加缺失的行

sql - Postgresql插入触发器连接

sql - 查询 Win32_NTLogEvent 类以获取上周的错误

ruby-on-rails-3 - 无法获得 Postgres.app 连接