如何使用分区并保持一致性
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)
我在日历 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)