对行进行编号并在特定条件下将计数器重置为 1

Dir*_*hse -1 sql t-sql sql-server window-functions

如何在 SQL Server 中针对关键字重置计数器?在以下数据中,每次找到字符串 'A' 时,计数器都需要重置为 1:

Item    Date
A       01.01.2019
B       02.01.2019
C       03.01.2019
D       04.01.2019
A       05.01.2019
B       06.01.2019
A       07.01.2019
B       08.01.2019
C       09.01.2019
D       10.01.2019
E       11.01.2019
A       12.01.2019
A       13.01.2019
A       14.01.2019
B       15.01.2019
Run Code Online (Sandbox Code Playgroud)

每次A找到我都需要重置计数器:

Count    Item    Date
1        A       01.01.2019
2        B       02.01.2019
3        C       03.01.2019
4        D       04.01.2019
1        A       05.01.2019
2        B       06.01.2019
1        A       07.01.2019
2        B       08.01.2019
3        C       09.01.2019
4        D       10.01.2019
5        E       11.01.2019
1        A       12.01.2019
1        A       13.01.2019
1        A       14.01.2019
2        B       15.01.2019
Run Code Online (Sandbox Code Playgroud)

Sal*_*n A 5

就像是:

WITH cte AS (
    SELECT *, COUNT(CASE WHEN Item = 'A' THEN 1 END) OVER (ORDER BY Date) AS GroupNum
    FROM t
)
SELECT *, ROW_NUMBER() OVER (PARTITION BY GroupNum ORDER BY Date) AS [Count]
FROM cte
ORDER BY Date
Run Code Online (Sandbox Code Playgroud)

cte 为每行分配一个运行计数,每次A遇到时都会增加。行是ROW_NUMBER()基于此计数器分配的。

db<>fiddle 上的演示