SQL查询返回错误结果:状态切换后重复出现次数计数问题求助
如何修正SQL以实现状态切换后的重复计数逻辑?
我需要在下表中实现这样的计数逻辑:统计同一状态在其他状态之后重复出现的次数。具体规则如下:
- 若状态保持不变且事件的
order顺序连续,则计数不应递增; - 若状态发生切换后再次回到同一状态,则计数需要递增。
示例表(含预期结果)
| sid | status | order | num_times_status_entered_again | Expected result |
|---|---|---|---|---|
| 1 | A | 1 | 1 | 1 |
| 1 | A | 2 | 2 | 1 |
| 1 | B | 3 | 1 | 1 |
| 1 | C | 4 | 1 | 1 |
| 1 | A | 5 | 3 | 2 |
| 1 | B | 7 | 3 | 2 |
| 1 | B | 8 | 4 | 2 |
| 1 | B | 9 | 5 | 2 |
| 1 | C | 10 | 2 | 2 |
| 1 | A | 11 | 4 | 3 |
| 1 | B | 13 | 7 | 3 |
| 1 | B | 14 | 8 | 3 |
| 1 | B | 15 | 9 | 3 |
| 1 | D | 16 | 1 | 1 |
| 1 | E | 17 | 1 | 1 |
| 2 | A | 1 | 1 | 1 |
| 2 | A | 2 | 2 | 1 |
| 2 | B | 3 | 1 | 1 |
| 2 | B | 4 | 2 | 1 |
| 2 | A | 5 | 3 | 2 |
当前错误的SQL语句
我尝试用下面的UPDATE语句实现,但返回的结果不符合预期:
update t set num_times_status_entered_again = t1.Ncount from #tableZ t, (select status count(1) OVER (Partition by status order by status) as Ncount from #sub_tableZ where status is not null group by status, date ) t1 GROUP BY sid
请帮忙修正这个SQL语句,使其符合上述计数逻辑要求。
内容的提问来源于stack exchange,提问作者Maddy
相关产品推荐
相关产品推荐

