SQL Server 在SQL中,如何在每次状态改变时从1开始获得连续的数字?

vohkndzv  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(96)

我试图找出如何获得连续数字的表与人的信息时,他们缺席,但当该人没有缺席一个月,计数应重新开始。

Here is an example of what I am looking for.

| Prior Month Absent In a Row | Absent? | MonthDate | PersonId |
|              1              |  Yes    | 2022-01-01|    101   |
|              2              |  Yes    | 2022-02-01|    101   |
|              -              |   No    | 2022-03-01|    101   |
|              1              |  Yes    | 2022-04-01|    101   |
|              2              |  Yes    | 2022-05-01|    101   |
|              3              |  Yes    | 2022-06-01|    101   |
|              -              |   No    | 2022-01-01|    102   |
|              1              |  Yes    | 2022-02-01|    102   |
|              2              |  Yes    | 2022-03-01|    102   |
|              3              |  Yes    | 2022-04-01|    102   |
|              4              |  Yes    | 2022-05-01|    102   |
|              5              |  Yes    | 2022-06-01|    102   |

因此,基本上,对于每个人ID,当他们连续缺席时,它应该计数,但当后续月份为“否”时,它从1开始。

我使用了按函数划分行,但效果不佳。

任何建议或链接将不胜感激。

7vux5j2d

7vux5j2d1#

select   case when grp is not null then row_number() over(partition by PersonId, grp order by MonthDate) end as prior_month_row
        ,Absent 
        ,MonthDate  
        ,PersonId
from
(
select   *
        ,case when Absent = 'Yes' then count(case when Absent = 'No' then 1 end) over(partition by PersonId order by MonthDate) end as grp
from     t
) t
order by PersonId, MonthDate

中 的 每 一 个
| 前 一 个 月 行|缺席|月份 日期|人员 标识|
| - -| - -| - -| - -|
| 一 个|是 的|2022 年 1 月 1 日|一百 零一|
| 2 个|是 的|2022 年 2 月 1 日|一百 零一|
| 零 值|没有|2022 年 3 月 1 日|一百 零一|
| 一 个|是 的|2022 年 4 月 1 日|一百 零一|
| 2 个|是 的|2022 年 5 月 1 日|一百 零一|
| 三 个|是 的|2022 年 6 月 1 日|一百 零一|
| 零 值|没有|2022 年 1 月 1 日|一百 零二|
| 一 个|是 的|2022 年 2 月 1 日|一百 零二|
| 2 个|是 的|2022 年 3 月 1 日|一百 零二|
| 三 个|是 的|2022 年 4 月 1 日|一百 零二|
| 四 个|是 的|2022 年 5 月 1 日|一百 零二|
| 五 个|是 的|2022 年 6 月 1 日|一百 零二|
Fiddle 的 最 大 值

相关问题