假设以下情况:
- 第 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/