gpt4 book ai didi

sql - 处理连续行计算

转载 作者:行者123 更新时间:2023-12-01 22:31:34 25 4
gpt4 key购买 nike

假设以下情况:

  • 第 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com