我的表中有以下数据 -
ColumnA ColumnB ColumnC ColumnD
111 555 1-Jan 5-Jan
111 555 5-Jan 9-Jan
111 222 9-Jan 15-Jan
111 555 15-Jan 20-Jan
111 222 20-Jan 1-Feb
111 333 1-Feb 10-Feb
111 333 10-Feb 1-Mar
111 333 1-Mar 4-Mar
111 444 4-Mar 31-Dec
我想填充表格中的columnE,它应该如下所示 -
ColumnA ColumnB ColumnC ColumnD ColumnE
111 555 1-Jan 5-Jan 1
111 555 5-Jan 9-Jan 1
111 222 9-Jan 15-Jan 2
111 555 15-Jan 20-Jan 3
111 222 20-Jan 1-Feb 4
111 333 1-Feb 10-Feb 5
111 333 10-Feb 1-Mar 5
111 333 1-Mar 4-Mar 5
111 444 4-Mar 31-Dec 6
我想从第1行开始计数(ColumnB的最低日期),如果值相同则分配相同的计数,如果值正在改变则增加值。 在第4行中,555再次重复,但我想将其赋值为3,因为它不是重复。仅当值与最后一个值相同时才分配相同的值。
我正在teradata工作。
答案 0 :(得分:0)
如果我理解正确,这是一个缺口和岛屿问题。一种解决方案使用行号的差异:
select t.*,
dense_rank() over (order by seqnum - seqnum_b, columna, columnb) as rank
from (select t.*,
row_number() over (partition by columna, columnb order by columnc) as seqnum_b,
row_number() over (order by columnc) as seqnum
from t
) t;