sql - 如何使用分区并保持一致性
问题描述
我在 CALENDAR 表中有一个从 1982 年到今天的所有日期的数据集。表中的每条记录(日期)都表明它是否是工作日。我正在尝试对行进行编号,使其从 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)
推荐阅读
- sql-server - 找出 SQL Server 中每分钟的计数
- firebase - 如何在颤动中动态获取单个 Firestore 文档
- groovy - 在 SAP CPI 中添加节点的 Groovy 脚本
- c# - 如何在可观察集合的 UI 中立即反映任何添加、删除、字段更改
- c - C11内存模型真的和常见的优化有冲突吗?
- javascript - 将输入文本保存到本地存储时遇到问题
- java - 如何使用 UIManager 更改按钮属性
- sql - SQL 字符串到日期时间
- reactjs - 使用 React JS 应用程序的 react-awesome-query-builder 的 CRUD 示例
- java - 在转码 H264 MP4 时重复帧(=冻结效果)会产生奇怪的伪影