sql - oracle sql group by change in time valid from valid to
问题描述
我有以下关于票状态随时间变化的历史数据,我感兴趣的是使用 VALFROM-VALTO 获得结果
源数据
ticket_ID, change-time , queue
--------------------------------------
001 , 2018-01-01 00:00:00, queue1
001 , 2018-01-01 00:01:00, queue1
001 , 2018-01-01 00:03:00, queue2
001 , 2018-01-01 00:04:00, queue1
001 , 2018-01-01 00:05:00, queue3
目标数据
ticket_ID, valfrom , valto , queue
-----------------------------------------------------------
001 , 2018-01-01 00:00:00, 2018-01-01 00:02:59, queue1
001 , 2018-01-01 00:03:00, 2018-01-01 00:03:59, queue2
001 , 2018-01-01 00:04:00, 2018-01-01 00:04:59, queue1
001 , 2018-01-01 00:05:00, 2999-12-31 23:59:59, queue3
我认为这可以使用带有 OVER 的 ROW_NUMBER 函数来完成。任何有用的建议都非常受欢迎。
解决方案
使用行号差异方法将行分类(基于连续队列值相同),lead
以从下一行获取值。此后,这是一个group by
获取从和到时间的操作。
select ticketid,queue,min(change_time),
coalesce(max(next_change_time)-interval '1' second,timestamp '2999-12-31 23:59:59')
from (select t.*,row_number() over(partition by ticketid order by change_time)
-row_number() over(partition by ticketid,queue order by change_time) as grp,
lead(change_time) over(partition by ticketid order by changetime) as next_change_time
from tbl t
) t
group by ticketid,queue,grp
推荐阅读
- javascript - 函数不会将括号转换为减号
- javascript - Tone.js 库在 Vue 中导入色调
- python - 如何在同一 HTML 页面中显示来自 django 表单的用户提交的值
- oracle - 如果我截断表,Oracle 会再次进行硬解析吗?
- wordpress - 无法获取与子类别相关的帖子
- python - Django 表单将方法返回为 GET 而不是 POST
- css - Angular - 更改 *ngFor 的所有元素的类,除了单击的那个
- c# - Win 32 API - 将窗口设置为最顶部且不可点击
- vb.net - VB.NET - WebClient - 如何让它更像一个真正的浏览器?
- json - monday.com webhook 集成 - 日期时间 json 字段中未显示时间