TABLE1
CODE RATE1 type MONTH
A 0 Acc1 201906
A 0 Acc1 201907
A 0 Acc1 201908
A 1 Acc1 201909
A 1 Acc1 201910
A 1 Acc1 201911
A 1 Acc1 201912
A 1 Acc1 202001
A 1 Acc1 202002
A 1 Acc1 202003
A 1 Acc1 202004
A 1 Acc1 202005
A 1 Acc1 202006
A 1 Acc1 202007
A 1 Acc1 202008
A 1 Acc1 202009
A 0 Acc2 201906
A 0 Acc2 201907
A 0 Acc2 201908
A 1 Acc2 201909
A 1 Acc2 201910
A 1 Acc2 201911
A 1 Acc2 201912
A 1 Acc2 202001
A 1 Acc2 202002
A 1 Acc2 202003
A 1 Acc2 202004
A 1 Acc2 202005
A 1 Acc2 202006
A 1 Acc2 202007
A 1 Acc2 202008
A 1 Acc2 202009
TABELA 2
CODE RATE2 MONTH
A 10 202001
A 10 202002
A 10 202003
A 10 202004
Unë jam duke punuar në migrimin e të dhënave nga sistemi i vjetër në sistemin e ri. Si pjesë e të dhënave të sistemit të vjetër që mbahen në muaj dhe do të përditësojnë të njëjtin rresht nëse të dhënat e përditësuara dhe tabela përmban një rresht për një muaj, unë po migroj në sistemin e lajmeve dhe ai përmban datën e fillimit dhe datën e mbarimit për të bërë regjistrimin aktiv. Pra, me përditësimin, të dhënat e reja duhet të futen dhe përditësohen datën e fundit të rreshtit të vjetër
Unë kam disa tabela të cilave duhet t'i bashkohem dhe të gjej datën e fillimit dhe datën e mbarimit bazuar në tarifën1 dhe tarifën2. Tabela ime e parë përmban të dhënat për të gjithë muajt dhe të dhënat e tabelës së dytë të disponueshme derisa të dhënat aktive të dekative nuk do të jenë të disponueshme. nëse norma është e disponueshme dhe ne e konsiderojmë si 0.
Rezultati im i pritur
CODE RATE1 RATE2 Type START_DT END_DT
A 0 0 Acc1 201906 201908
A 1 0 Acc1 201909 201912
A 1 10 Acc1 202001 202004
A 1 0 Acc1 202005 202009
A 0 0 Acc2 201906 201908
A 1 0 Acc2 201909 201912
A 1 10 Acc2 202001 202004
A 1 0 Acc2 202005 202009
Por unë jam duke marrë më poshtë rezultatin 23 rreshta.
select code1, rate1, rate2, type, min(month) start_dt,
case when row_number() over(partition by code1 order by max(month) desc) = 1 then 999912 else max(month) end end_dt
from (
select t1.month, code1, rate1, rate2, type,
row_number() over(partition by code1 order by t1.month) rn1,
row_number() over(partition by code1, type, rate1, rate2, type order by t1.month) rn2
from table1 t1 left join table2 t2 on t1.code1 = t2.code2 and t1.month = t2.month
) t
group by code1, rate1, rate2, type, rn1 - rn2
order by start_dt
Ju lutem gjeni pyetjen time në këtë URL https://dbfiddle.uk/?rdbms=oracle_18&fiddle=b4f77cd13967c1c5a74efcacfb3d3a22
Faleminderit paraprakisht.
Ju lutemi komentoni nëse keni nevojë për më shumë informacion