我有一个只有Operation个附加的表,其中包含以下列:

  • Id,整数,主键,自动递增
  • LotId,整数,外键,自动递增
  • -Amount,整数

每当在该表中插入新行时,我都需要反映余额,因此我使用以下命令创建了一个Ledger视图:

CREATE VIEW IF NOT EXISTS "Ledger" ("OperationId", "Balance") 
AS SELECT "Id", SUM("Amount") OVER (ROWS UNBOUNDED PRECEDING) 
FROM "Operation";

我需要的是通过LotId进一步过滤运行总和,即总和应该只包括OperationLotId匹配的那些行.

示例

Operation                  Ledger

Id | LotId |Amount         OperationId | LotId | Balance
---+-------+------         ------------+-------+--------
1  | 1     | 10            1           | 1     | 10
2  | 2     | 5             2           | 2     | 5
3  | 1     | -7            3           | 1     | 3

推荐答案

您应该使用PARTITION BY子句来获得LotId的总和:

CREATE VIEW IF NOT EXISTS Ledger AS 
SELECT Id AS OperationId, 
       LotId,
       SUM(Amount) OVER (PARTITION BY LotId ORDER BY Id) AS Balance
FROM Operation;

See the demo.

Sql相关问答推荐

如何在VB.NET中使用MS SYS根据开始和结束期间日期进行查询

Trino/Presto sq:仅当空值位于组中第一个非空值之后时,才用值替换空值

用相同值更新行

当我们加入两个表时,我们可以省略GROUP BY中的列名吗?

Access VBA SQL命令INSERT FOR MULTIME VALUE

编写一个SQL查询来返回收视率较高的类型,并取这些收视率的平均值,我该如何做呢?

替换上一个或下一个值中的空值并添加其价格日期

PostgreSQL抽奖查询

根据时间、状态和相关行在PostgreSQL中的存在来删除行

在VB.NET中如何在MS Access数据库中创建SQL项目历史库存卡

如何在多列上编写具有不同条件的查询?

如何解释 SQL Server 中的 Foxpro 语法?

Postgresql 具有相似行为和模式行为的问题

Postgres存在限制问题「小值」

一次 Select 语句中按组累计的SQL累计数

如何优化仅返回符合条件的三条记录的查询?

正则表达式:停在第一个匹配的其中一个字符位置上

为数组中的每个元素从表中收集最大整数

具有关联统计信息 N+1 的 Rails 6 索引资源?

Select 随机行,使得列子组的组合是唯一的