首页 > 解决方案 > 排名应仅针对特定列值增加

问题描述

我有以下数据

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

有人可以帮我吗?

提前致谢

标签: sqloracleaggregate

解决方案


您可以使用累积总和:

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;

推荐阅读