sql - 排名应仅针对特定列值增加
问题描述
我有以下数据
Col1 COl2
A 20-Mar-2020
B 22-Mar-2020
A 25-Mar-2020
B 28-Mar-2020
C 04-Apr-2020
D 10-Apr-2020
E 25-Apr-2020
在我的输出中,我想以仅当列值为 A 和 C 时才增加排名的方式显示排名,当列值为 A 和 C 时日期也会更改
我需要的输出是
Rank Col1 Col2
1 A 20-Mar-2020
1 B 20-Mar-2020
2 A 25-Mar-2020
2 B 25-Mar-2020
3 C 04-Apr-2020
3 D 04-Apr-2020
3 E 04-Apr-2020
有人可以帮我吗?
提前致谢
解决方案
您可以使用累积总和:
select t.*,
sum(case when col1 in ('A', 'C') then 1 else 0 end) over (order by col2)
from t;
注意:这假设日期值是不同的(隐藏的时间分量)。如果没有,您可能想要:
select t.*,
sum(case when col1 in ('A', 'C') then 1 else 0 end) over (order by col2, col1)
from t;
推荐阅读
- opencv - 带噪声的特征匹配
- regex - 正则表达式否定回溯到行中的任何位置
- python-3.x - mlflow 运行 git-uri 克隆到特定目录
- javascript - 在对象内调用 JavaScript 函数
- flutter - 错误:遵循 audio_service 教程时,没有为“MediaControl”类型定义获取器“暂停/停止/播放”
- html - 如何在检查元素中查看 HTML 路径文件?
- reactjs - 使用 React-table 根据元数据过滤行
- python - 使用任何 python 库从宏 excel 调用中获取单元格值到另一个工作表
- javascript - 后台切换分两部分
- reactjs - 在 axios.post 之后属性保持未定义