我正试图找到一种方法来显示在第二个事件类型发生之前事件类型连续发生了多少次。当我有这个时,我需要在事件类型连续发生6次时显示
为了简化我有一个包含
的'Calls'表CallID
UserID
Outcome
DateOfCall
从那时起,我有很多UserID
个结果,Yes
或No
在不同时间
我需要找到连续6次没有发生的事情
我目前正在使用分区,并且已计算出Outcome
每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
的呼叫将触发,因为它是第6个“否”事件,但两次都只发生了3次。
非常感谢任何帮助
答案 0 :(得分:4)
你可以使用"行号的差异来做你想做的事情"的方法:
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()
更有意义。