如何使用分区并保持一致性

how to use partition and keep consistency

我在日历 table 中有一个包含从 1982 年到今天的所有日期的数据集。 table 中的每条记录(日期)都指示是否为工作日。我正在尝试对行进行编号,以便它从 1 开始并连续 运行 到日期,但是当它到达一个不是工作日的日期时,它将收到与前一个日期相同的数字,并且继续编号 - 不分区并重新开始编号。 这是我使用的代码:

SELECT t1.thedate,
        t1.working_day,
        Rank() Over(PARTITION BY Working_Day ORDER BY TheDate) AS test
FROM CAL t1
WHERE 1=1
ORDER BY 1

不要使用 RANK,只需对 1/0 求和即可:

sum(case when Working_Day = 'Y' then 1 else 0 end)
over (ORDER BY TheDate
      rows unbounded preceding)

或更短一点,计算非空行数:

count(case when Working_Day = 'Y' then 1 end)
over (ORDER BY TheDate
      rows unbounded preceding)