sql - 计算重复状态的迭代次数
问题描述
更新:
我有一个记录批准工作流程状态的表格。该表如下所示:
NUMBER STATUS STATUS_DATE
248033 Registration 2017-12-02 12:20:58.0
248033 Processed 2017-12-04 11:29:16.0
248033 Approve 2017-12-04 11:32:11.0
248033 Approved 2017-12-04 16:27:45.0
248033 Completed 2017-12-05 06:01:29.0
248033 Registration 2017-12-07 10:02:16.0
248033 Approve 2017-12-08 15:48:09.0
248033 Processed 2017-12-08 16:15:00.0
248033 Completed 2017-12-09 10:23:32.0
248033 Registration 2018-07-20 16:49:25.0
248033 Processed 2018-07-20 16:54:32.0
248033 Completed 2018-07-25 11:41:59.0
248033 Registration 2019-03-11 09:56:10.0
248033 Processed 2019-03-11 09:56:11.0
248033 Completed 2019-03-12 06:01:10.0
我想计算文档被批准的次数(迭代/周期)。一个迭代总是以“REGISTRATION”开始,以“COMPLETED”结束。但是在这两种状态之间,可能会看到很多状态之间来回“翻转”。也可以省略 'Processed' 或 'Approve' 或 'Approved' 。
我想对批准迭代进行分组,如下所示:
NUMBER STATUS STATUS_DATE ITERATION
248033 Registration 2017-12-02 12:20:58.0 1
248033 Processed 2017-12-04 11:29:16.0 1
248033 Approve 2017-12-04 11:32:11.0 1
248033 Approved 2017-12-04 16:27:45.0 1
248033 Completed 2017-12-05 06:01:29.0 1
248033 Registration 2017-12-07 10:02:16.0 2
248033 Approve 2017-12-08 15:48:09.0 2
248033 Processed 2017-12-08 16:15:00.0 2
248033 Completed 2017-12-09 10:23:32.0 2
248033 Registration 2018-07-20 16:49:25.0 3
248033 Processed 2018-07-20 16:54:32.0 3
248033 Completed 2018-07-25 11:41:59.0 3
248033 Registration 2019-03-11 09:56:10.0 4
248033 Processed 2019-03-11 09:56:11.0 4
248033 Completed 2019-03-12 06:01:10.0 4
关于如何使用 Oracle SQL 实现这一点的任何想法?
解决方案
OVER
使用子句计算注册:
select
number,
status,
status_date,
count(case when status = 'Registration' then 1 end) over (order by status_date)
as iteration
from mytable
order by status_date;
编辑:您说“注册”可以在“完成”之前多次发生。您可以改为计算“已完成”,并且仅在该行本身不是“已完成”行时才加 1。
select
number,
status,
status_date,
count(case when status = 'Completed' then 1 end) over (order by status_date) +
case when status = 'Completed' then 0 else 1 end as iteration
from mytable
order by status_date;
推荐阅读
- python - Python中的请求与请求模块
- java - Android Studio 中设置了错误的 JDK 路径
- matplotlib - sharey='row' 和 sharey='True' 的区别
- python - 如何管理配置文件?
- javascript - 如何在打字稿中粗略导入没有类型声明的.js库?
- c++ - 填充红黑树的最有效方法是什么?
- npm - Yarn 命令行输出与 package.json 文件不匹配
- html - 如何在鼠标悬停在字形图标上时显示带有图像的对话框
- ruby - 在 Ruby 中以权重概率返回 true
- python - F() 没有 django 的 len 类型