oracle求上一季度的数据

有一张表,本季度的数据不完整,想通过本月求上个季度的数据怎么求

img

select zzz.*
  from zzz
 where decode(to_char(sysdate, 'q'), '1', '4', '2', '1', '3', '2', '4', '3') =
       to_char(to_date(yf, 'yyyymm'), 'q')
   and decode(to_char(sysdate, 'q'),
              '1',
              to_char(sysdate, 'yyyy') - 1,
              substr(yf, 1, 4)) = substr(yf, 1, 4)

img


加个开窗函数字段就好了

select zzz.*,avg(fs) over() avg_fs
  from zzz
 where decode(to_char(sysdate, 'q'), '1', '4', '2', '1', '3', '2', '4', '3') =
       to_char(to_date(yf, 'yyyymm'), 'q')
   and decode(to_char(sysdate, 'q'),
              '1',
              to_char(sysdate, 'yyyy') - 1,
              substr(yf, 1, 4)) = substr(yf, 1, 4)

表结构
create table zzz (
mxid varchar2(50),
yf varchar2(50),
fs number);
insert into zzz values('QQ','202204',80);
insert into zzz values('QQ','202203',70);
insert into zzz values('QQ','202202',90);
insert into zzz values('QQ','202201',60);
insert into zzz values('QQ','202112',74);
insert into zzz values('QQ','202111',86);
insert into zzz values('QQ','202110',94);
insert into zzz values('QQ','202109',76);
insert into zzz values('QQ','202108',83);
insert into zzz values('QQ','202107,91);
insert into zzz values('QQ','202106',88);
insert into zzz values('QQ','202105',95);

1、你期望的输出结果是什么?

1.不知道你所说的需要上个季度的数据是指什么,这种模棱两可的表述很头痛。
2.Oracle中有日期转文本带季度掩码:to_char(date,'Q')
3.或者题主的月份是文本,通过截取字符串也可得到季度

case when (to_number(substr(yf,5,6)) <=3 then 1
        when (to_number(substr(yf,5,6)) <=6 then 2
        when (to_number(substr(yf,5,6)) <=9 then 3
else 4 end 
--截取月份字符串转数值类型然后判断得到季度号

4.还是那个问题,不知道通过本月求上个季度数据是什么意思,如果涉及到对比可以用lag函数。