我有以下数据
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
在我的输出中,我想以这样的方式显示Rank,只有当列值是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
谁能帮我解决这个问题?
先谢谢你
我想你需要两层 WINDOWS
函数如下。
select rnk, col1,
min(case when col1 in ('A', 'C') then col2 end)
over (partition by rnk) as col2
from
(select t.*,
sum(case when col1 in ('A', 'C') then 1 else 0 end)
over (order by col2) as rnk
from t);
你可以使用累加和。
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;
戈登的查询只涉及排名,问题的第2部分要求:
max(case when col1 in ('A', 'C') then col2 end)
over (order by col2)
如果按列的顺序与返回的列不同。
last_value(case when col1 in ('A', 'C') then col2 end ignore nulls)
over (order by col2) -- might be any other column, too