当前位置: 首页 > 面试题库 >

如何使用postgres窗口功能在会计软件中计算余额

邓俊英
2023-03-14
问题内容

有一个包含以下数据的表:

ID      In       Out 
1      100.00    0.00   
2       10.00    0.00   
3        0.00   70.00    
4        5.00    0.00    
5        0.00   60.00   
6       20.00    0.00

现在,我需要一个查询,该查询给出以下结果:

ID      In       Out    Balance
1      100.00    0.00   100.00
2       10.00    0.00   110.00
3        0.00   70.00    40.00
4        5.00    0.00    45.00
5        0.00   60.00   -15.00
6       20.00    0.00     5.00

如何最好地处理“余额”计算。有人告诉我postgres中有window函数,如何使用postgres window函数来完成呢?

谢谢。


问题答案:

select t.*, sum(“In”-“Out”) over(order by id) as balance
from tbl t
order by id

小提琴: http

**://sqlfiddle.com/#!15/97dc5/2/0**

考虑更改列名“ In” /“ Out”,这样您就不必在引号中加上引号了。(它们是保留字)

如果只需要一位客户(customer_id = 2):

select t.*, sum("In"-"Out") over(order by id) as balance
from tbl t
where customer_id = 2
order by id

如果您的查询要跨越多个客户,并且您希望与每个客户重新开始保持平衡,则可以使用:

select t.*, sum("In"-"Out") over( partition by customer_id
                                  order by customer_id, id ) as balance_by_cust
from tbl t
order by customer_id, id


 类似资料:
  • 问题内容: 我正在尝试将某些Windows函数(和)用于数据框,但我不知道如何使用它们。 有人可以帮我吗?在Python API文档 中,没有关于它的示例。 具体来说,我正在尝试获取数据框中数字字段的分位数。 我正在使用Spark 1.4.0。 问题答案: 要使用窗口功能,您必须先创建一个窗口。定义与普通SQL几乎相同,这意味着您可以定义顺序,分区或同时定义两者。首先让我们创建一些虚拟数据: 确保

  • 问题内容: 我有一个名为的表,最近刚刚在其中添加了一个名为type的新列。 行值将不是整个表唯一的,而是它们各自的字段唯一的。无论如何,我什至不在乎它们的独特性。 所有这些的目的是允许用户设置他们上传的照片的排序顺序(最多10张,并且可以拖动和重新排序等)。当用户“删除”照片时,我不会删除记录,我只是在该行上设置了一个字段。 Aaaanyway,我要介绍一个添加的迁移(它们以前无法订购照片,它们只

  • 我试图在火花数据帧中使用rowNumber。我的查询在Spark shell中按预期工作。但是当我在eclipse中写出它们并编译一个jar时,我面临着一个错误 我的问题 在Spark shell中运行查询时,我没有使用HiveContext。不确定为什么它返回一个错误,当我运行相同的jar文件。如果有帮助的话,我也在Spark 1.6.0上运行脚本。有人面临类似的问题吗?

  • 问题内容: 我正在使用SQL Server 2012构建库存计划/重新排序引擎。 我有一堆过时的交易,称它们为贷方和借方。我想一次做两件事: 生成运行总计(每日净余额) 生成补充建议。补充将重置“总计”(在“#1”中)为零。 该表如下所示: 我正在使用SQL 2012 SUM OVER()窗口函数来显示这些的运行总数。 我需要找到一种方法将运行总计(又称RT)重置为零(如果下降到零以下)。 我的查

  • 我有一个聚合函数,它计算WindowedStream中一系列事件的平均值。 这里的警告是,平均值需要在可能无序(或根本没有)到达的事件对上计算。 换句话说,我需要在计算之前对数据进行排序,因为序列很重要。 我可以用getResult API来实现这一点,但是这个函数在窗口中的每个事件上都被调用,这在性能方面没有意义。我也可以用flink cep来做这件事,但出于同样的原因,我想避免使用它。 理想情

  • 问题内容: 我有一个带有一些外键的表,我需要获取这些键何时更改的报告。 SELECT from,to,FIRST(timestamp)FROM表GROUP BY from,to; 我可以使用“分组依据”来获取前两个过渡,但是它将第三个与第一个过渡组合在一起,当它返回时我看不到它。 我想进行以下查询: 是否可以? 问题答案: 在PostgreSQL 8.4中,您可以使用窗口函数LAG访问上一行并进行