sql - 如何为剩余总计编写oracle sql查询

标签 sql oracle oracle11g

我有以下查询返回的数据集,我在下面显示了一些行,但返回的实际数据超过 50 万行。

Date         | amount
01-01-2010   | 200
01-02-2010   | 50
01-03-2010   | 400
01-04-2010   | 50
01-05-2010   | 0
01-06-2010   | 0
01-07-2010   | 100

我想查询返回 Remaining Amount 列,如下所示:

Date         | amount   | Remaining
01-01-2010   | 200      | 600
01-02-2010   | 50       | 550
01-03-2010   | 400      | 150
01-04-2010   | 50       | 100
01-05-2010   | 0        | 100
01-06-2010   | 0        | 100
01-07-2010   | 100      | 0

剩余金额以总金额之和开头,即所有记录金额列的总和。

最佳答案

您还可以使用 Windowing Clause避免 SUM(AMOUNT) - (...):

SELECT dt, AMOUNT,
   nvl(sum(amount) over 
      (order by dt desc rows between unbounded preceding and 1 preceding)
   , 0) as REMAINING
FROM yourtable
order by dt

使用分析函数应该比相关子查询提供更好的性能,因为表只被扫描一次。

关于sql - 如何为剩余总计编写oracle sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26189659/

相关文章:

sql - 谁能告诉我以下两个 mysql 语句中的逻辑错误在哪里?

sql - PostgreSQL 更新插入 : do nothing if fields don't change

oracle - 从返回表的 Oracle 包函数获取结果

database - 有没有办法审计对数据库执行的任何操作?

java - 错误: Could not create the Java Virtual Machine

SQL LEFT JOIN 与 WHERE 类

sql - 如何检查 SQL 表行的大小(以 b/kb/mb 为单位)?

sql - 用通配符替换值(解析文本数据)

performance - 该日期列上的非唯一索引会减慢插入具有相同日期值的 50 万个条目的速度吗?

plsql - Oracle 仅显示 "PL/SQL procedure successfully completed"。运行代码后无输出