我试图找到一种方法来显示事件类型在发生第二个事件类型之前连续发生了多少次。当我需要显示事件类型连续发生6次时
为简化起见,我有一个“通话”表,其中包含
CallID UserID Outcome DateOfCall
从那里,我有许多UserID
s的结果一样Yes
或No
在不同的时间
我需要找出连续六次没有发生的时间
我目前正在使用Partition,并且已经计算出Outcome
s 的数量UserID
,但是当Outcome
第二次更改时,我正在努力重置行号UserID
select CallID, UserID, Outcome, DateOfCall rnk = ROW_NUMBER() OVER (PARTITION BY UserID , outcome ORDER BY DateOfCall ASC) from Calls order by UserID, DateOfCall
给我以下的UserID
- 19/01/2017 12:00 - Yes - 1 - 19/01/2017 12:01 - Yes - 2 - 19/01/2017 12:02 - Yes - 3 - 19/01/2017 12:03 - No - 1 - 19/01/2017 12:04 - No - 2 - 19/01/2017 12:05 - No - 3 - 19/01/2017 12:06 - Yes - 4 - 19/01/2017 12:07 - Yes - 5 - 19/01/2017 12:08 - No - 4 - 19/01/2017 12:09 - No - 5 - 19/01/2017 12:10 - No - 6
如您所见,呼叫12:10
将触发,因为它是第六次“否”事件,但是两次均连续发生3次。
任何帮助将不胜感激
您可以使用“行号差异”方法来做您想做的事情:
select c.*, row_number() over (partition by userid, outcome, seqnum_u - seqnum_uo order by dateofcall ) as rnk from (select c.*, row_number() over (partition by userid order by dateofcall) as seqnum_u, row_number() over (partition by userid, outcome order by dateofcall) as seqnum_uo from Calls c ) c order by UserID, DateOfCall;
第一次看到此逻辑时比较棘手(嘿,也许也是第三或第五次)。我建议您运行内部查询,以便可以看到为什么差异标识相邻状态值的组。然后,row_number()
在外部查询中更有意义。