sql - 处理连续行计算

标签 sql oracle plsql oracle11g

假设以下情况:

  • 第 1 周:
    • 0 个先前案例
    • 10 个新案例
    • 3 个已解决的案例
  • 第 2 周:
    • 7 个先前案例
    • 13 个新病例
    • 15 个已解决的案例
  • 第 3 周:
    • 5 个先前案例
    • 6 个新案例
    • 7 个已解决的案例

此信息存储在以下类型的恢复表中:

RESUME_TABLE:
WEEK    | TOTAL_NEW |   TOTAL_SOLVED
1       |   10      |   3
2       |   13      |   15
3       |   6       |   7

我很难构建查询来获得以下结果:

REPORT_TABLE:
WEEK    |   PREV_TOTAL  |   NEW_CASES   |   SOLVED_CASES    |   NEW_TOTAL
1       |   0           |   10          |   3               |   7
2       |   7           |   13          |   15              |   5
3       |   5           |   6           |   7               |   4

这个想法似乎很微不足道,NEW_TOTAL = PREV_TOTAL + NEW_CASES - SOLVED_CASES,尽管我一直在努力考虑将 PREV_TOTAL 带到下一行以便继续。

我尝试使用 RESUME 表 (Oracle 11g) 上的 View 来完成此操作。

有人可以帮我一些示例代码吗?

最佳答案

非常简单和整洁,带有分析函数:

12:57:06 HR@vm_xe> l                                                                    
  1  select week                                                                        
  2         ,lag(total_cases_by_now - total_solved_by_now) over (order by week) prev_total
  3         ,total_new new_cases                                                        
  4         ,total_solved solved_cases                                                  
  5         ,total_cases_by_now - total_solved_by_now new_total                         
  6    from (                                                                           
  7    select week                                                                      
  8           ,total_new                                                                
  9           ,total_solved                                                             
 10           ,sum(total_new) over(order by week asc) as total_cases_by_now             
 11           ,sum(total_solved) over (order by week asc) as total_solved_by_now        
 12      from resume_table                                                              
 13* )                                                                                  
12:57:07 HR@vm_xe> /                                                                    

      WEEK   PREV_TOTAL  NEW_CASES SOLVED_CASES  NEW_TOTAL                                
---------- ------------ ---------- ------------ ----------                                
         1                      10            3          7                                
         2            7         13           15          5                                
         3            5          6            7          4                                

3 rows selected.                                                                        

Elapsed: 00:00:00.01                                                                    

关于sql - 处理连续行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12380640/

相关文章:

Python+SQL : How to execute a procedure from python? [不调用存储过程]

oracle - 如何在 Oracle 11g 系统上找到可用的目录对象?

mysql - 根据另一列中的值按第 1 列或第 2 列对行进行排序

sql - 插入与插入

java.sql.SQLException : Fail to convert to internal representation: while passing ArrayList to Oracle. sql.数组

oracle - 如何从有效负载超过 32000 个字符的 Oracle DB 11.2 调用 SOAP WS?

oracle - 一个表字段上的触发器适用于所有表字段

oracle - Oracle 中函数的 DETERMINISTIC 和 PARALLEL_ENABLED 之间的区别

sql - 我怎样才能优化这个查询(或者有更好的方法)?

java - 数据库行上的锁的范围(简单)