我的目标是为具有开始日期/时间和结束日期/时间的记录建立每小时计数。从开始到结束,实际记录永远不会超过24小时,但是很多时候会更少。如果我根据“时钟”跳出每条记录,则该方法有效,直到“今天”为止的每个日期都有24个时段。但是,每天运行2000条记录可能要花很多时间。
这是我得到的细节:
绿色的日期/时间是我想要的一组开始日期/时间。蓝色的日期/时间是我想要的组的结束日期时间。
赞:
我尝试了分区,但是因为在第二张图片中,第四行与第二行具有相同的值,所以即使它们之间存在时间跨度,第三行也将它们分组在一起。
答案 0 :(得分:0)
这是一个孤岛问题。开始日期和结束日期在相邻的行上匹配,因此行号的差异似乎就足够了:
select id, min(startdatetime), max(enddatetime),
d_id, class, location
from (select t.*,
row_number() over (partition by id order by startdatetime) as seqnum,
row_number() over (partition by id, d_id, class, location) as seqnum_2
from t
) t
group by id, d_id, class, location, (seqnum - seqnum_2);
order by id, min(startdatetime);