你可以将日期与之前的行日期进行比较,并使用累积总和建立分段ID,像这样。
prev_dates as ( select id, date_start, date_end, lag(date_end) over (order by date_start) as prev_date_end from evento sequences as ( select *, sum(case when date_start>prev_date_end then 1 else 0 end) over (order by date_start) as sequence_id from prev_dates select sequence_id, min(date_start) as date_stat, max(date_end) as date_end from sequences group by 1AlexYes
发布于 2021-05-01
0 人赞同
谢谢你的回答,Alex。对不起,我在问题中忽略了我有 "在线 "或 "忙碌 "状态的类型列。因此,在一个在线会话中可能有1个或更多的繁忙会话,我们应该将日期_开始与前一个在线-结束进行比较。如何在窗口函数中考虑这个问题?
忙碌的 "会议 "是否完全在 "在线 "会议内,你需要确定 "在线 "会议的顺序?
一些 "忙 "的时段是在 "在线 "之外。这是一个数据上的错误,我想填补 "在线 "时间的空白,"忙碌 "发生在这里。
@Dmitros 如果 "忙 "的会话是连锁的,你可以通过按状态过滤记录来建立 "忙 "的会话序列,然后将这些序列并入 "在线 "的会话,做同样的排序操作......有意义吗?