많은 시퀀스가있는 테이블이 있습니다. 예 :시퀀스를 식별하고 그에 따라 행동하십시오.
ID G_Ind Amount rnk_date
1 1 50 1
1 0 100 2
1 0 50 3
1 1 100 4
2 0 50 1
2 1 100 2
2 0 50 3
2 1 100 4
3 0 50 1
3 1 100 2
3 1 50 3
3 0 100 4
4 0 100 1
4 1 50 2
4 1 100 3
5 1 50 1
5 1 100 2
5 0 50 3
5 0 100 4
5 1 50 5
5 1 100 6
And my desired output is :
ID G_ind Amount rnk_date rank_date_internal_forIndG Amount_To_Take
1 1 50 1 1 0
1 0 100 2 NULL 100
1 0 50 3 NULL 50
1 1 100 4 2 100
--------------------------------------------------------------------
2 0 50 1 NULL 50
2 1 100 2 1 0
2 0 50 3 NULL 50
2 1 100 4 2 100
-------------------------------------------------------------------
3 0 50 1 NULL 50
3 1 100 2 1 0
3 1 50 3 2 50
3 0 100 4 NULL 100
-------------------------------------------------------------------
4 0 100 1 NULL 100
4 1 50 2 1 0
4 1 100 3 2 100
-------------------------------------------------------------------
5 1 50 1 1 0
5 1 100 2 2 0
5 0 50 3 NULL 50
5 0 100 4 NULL 100
5 1 50 5 3 50
5 1 100 6 4 100
--------------------------------------------------------------------
저는 4 개의 첫 번째 열을 이미 구축했으며 "Amount_To_Take"를 계산하려고합니다.
는 너무 설명하기 복잡하지 바란다 그러나 나는 시도 할 것이다 :
이식 1에서 Amount_To_Take 처음으로 0 G_Ind = 1입니다.
* G_Ind = 1 (내부 rank_date에 따라 rank_date_internal_forIndG를 추가 한 경우) 예외없이 모든 경우에 Amount_To_Take에 0을 넣을 예정입니다.
내 문제 이드에서 rank_date_internal_forIndG = 2 때입니다 - 1,2,3,4 우리가 amout를 요약하고 간단한 그것은 있도록 Amount_To_Take에 넣어가는 :
case when rank_date_internal_forIndG = 2 and G_Ind = 1 then 0
하지만 경우에
ID가 5 일 때는 마지막 ID가 아니기 때문에 아닙니다.이들은 현재 내 모든 옵션이므로 나머지 조합은 생각하지 않아도됩니다.
select t.*,
(case when g_ind = 1
then row_number() over (partition by id, g_ind order by rnkdate)
end) as rank_date_internal_forIndG
from t;
당신은 마지막을 얻을 수 있습니다 : 어떻게 (ID = 5, 다른 2 ~ 4 사이의 디퍼 런스 세라마이드 때 경우)