每小时记录的组记录

时间:2019-03-20 18:23:51

标签: sql sql-server sql-server-2014

我的目标是为具有开始日期/时间和结束日期/时间的记录建立每小时计数。从开始到结束,实际记录永远不会超过24小时,但是很多时候会更少。如果我根据“时钟”跳出每条记录,则该方法有效,直到“今天”为止的每个日期都有24个时段。但是,每天运行2000条记录可能要花很多时间。

这是我得到的细节:

enter image description here

绿色的日期/时间是我想要的一组开始日期/时间。蓝色的日期/时间是我想要的组的结束日期时间。

赞:

enter image description here

我尝试了分区,但是因为在第二张图片中,第四行与第二行具有相同的值,所以即使它们之间存在时间跨度,第三行也将它们分组在一起。

1 个答案:

答案 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);