Sql 如何从增量年值中获取旧值?
我有两张桌子: 表1: | Year | CRN | CID | Cap | | 201910 | 14 | ABC1 | 12 | | 201910 | 15 | ABC1 | 14 | | 201820 | 25 | ABC1 | 15 | | 201820 | 26 | ABC1 | 25 | | 201810 | 43 | ABC1 | 10 | | 201720 | 55 | ABC1 | 11 | |年份| CRN | CID | Cap| |201910 | 14 | ABC1 | 12| |201910 | 15 | ABC1 | 14| |201820 | 25 | ABC1 | 15| |201820 | 26 | ABC1 | 25| |201810 | 43 | ABC1 | 10| |201720 | 55 | ABC1 | 11| 表2: | Year | CRN | BLCK | | 201910 | 14 | A1 | | 201910 | 15 | A1 | | 201820 | 25 | B2 | | 201820 | 26 | B2 | | 201810 | 43 | C3 | | 201720 | 55 | C4 | | 201720 | 95 | F5 | | 201710 | 65 | D4 | |年份| CRN | BLCK| |201910 | 14 | A1| |201910 | 15 | A1| |201820 | 25 | B2| |201820 | 26 | B2| |201810 | 43 | C3| |201720 | 55 | C4| |201720 | 95 | F5| |201710 | 65 | D4| 我想返回:Sql 如何从增量年值中获取旧值?,sql,oracle,group-by,aggregation,analytic-functions,Sql,Oracle,Group By,Aggregation,Analytic Functions,我有两张桌子: 表1: | Year | CRN | CID | Cap | | 201910 | 14 | ABC1 | 12 | | 201910 | 15 | ABC1 | 14 | | 201820 | 25 | ABC1 | 15 | | 201820 | 26 | ABC1 | 25 | | 201810 | 43 | ABC1 | 10 | | 201720 | 55 | ABC1 | 11 |
lag()
函数和按年份进行分组
select "Year", "CID", "CurrYear Cap", "CurrYear BLCK",
"Last Year", "LastYear Cap", "LastYear BLCK"
from
(
select "Year", "CID", "CurrYear Cap", "CurrYear BLCK",
lag("Year") over (order by "Year") as "Last Year",
lag("CurrYear Cap") over (order by "Year") "LastYear Cap",
lag("CurrYear BLCK") over (order by "Year") "LastYear BLCK",
row_number() over (order by "Year" desc) as rn
from
(
with table1(Year, CRN, CID, Cap) as
(
select 201910 , 14 , 'ABC1' , 12 from dual union all
select 201910 , 15 , 'ABC1' , 14 from dual union all
select 201820 , 25 , 'ABC1' , 15 from dual union all
select 201820 , 26 , 'ABC1' , 25 from dual union all
select 201810 , 43 , 'ABC1' , 10 from dual union all
select 201720 , 55 , 'ABC1' , 11 from dual
) ,
table2(Year , CRN , BLCK) as
(
select 201910 , 14 , 'A1' from dual union all
select 201910 , 15 , 'A1' from dual union all
select 201820 , 25 , 'B2' from dual union all
select 201820 , 26 , 'B2' from dual union all
select 201810 , 43 , 'C3' from dual union all
select 201720 , 55 , 'C4' from dual union all
select 201720 , 95 , 'F5' from dual union all
select 201710 , 65 , 'D4' from dual
)
select max(t1.year) as "Year",
max(t1.CID) as "CID", sum(t1.Cap) as "CurrYear Cap", max(t2.blck) as "CurrYear BLCK"
from table1 t1
join table2 t2 on t1.year = t2.year and t1.crn = t2.crn
group by t1.year
)
)
where rn = 1;
Year CID CurrYear Cap CurrYear BLCK Last Year LastYear Cap LastYear BLCK
------ ---- ------------ ------------- ---------- ------------ --------------
201910 ABC1 26 A1 201820 40 B2
如果最后的中rn=1
被rn
替换为订单,则所有“年”值的所有行都列在订单中
请以表格数据的形式向我们显示预期输出。数据结构是我们共同使用的语言。抱歉@GMB。在上面的问题中添加了。@django unchained不客气。我考虑了表1中的cab
值,分别为15和25。很抱歉,我在预期输出中出错。能否更改您的查询以获得低于预期的结果?