sql求上个月的月份和得分

问题是现在是2022年5月份,我想求2022年4月份的月份和得分,通过4月份的得分,求出来3月份的得分和数据,如何写sql

img

上面这张是表结构

img


这张是我想要求出来的效果

日期改一下就可以了
select T1.mxid,
LAG(T1.YF,0)OVER(PARTITION BY T1.YF ORDER BY T1.YF DESC ),
LAG(T1.FS,0)OVER(PARTITION BY T1.YF ORDER BY T1.YF DESC ),
T2.DTYF,
T2.DTFS
FROM zzz T1
LEFT JOIN (select mxid AS mxidT2,
LAG(YF,0)OVER(PARTITION BY YF ORDER BY YF DESC ) DTYF,
LAG(FS,0)OVER(PARTITION BY YF ORDER BY YF DESC ) DTFS 
FROM zzz 
WHERE YF = '202203') T2 
ON T1.MXID = T2.mxidT2
WHERE YF = '202204'

表结构粘一下

1、我理解你是想求最近2个月两条zzz表数据行转列?
考虑有可能上个月或上上个月甚至两个月都无数据的情况:


    SELECT NVL( a.mxid, NVL( b.mxid, '两个月都无数据的默认值' ) ) mxid
         , t.m1, ( CASE WHEN NVL( a.fs, 0 ) = 0 THEN 1 ELSE a.fs END ) fs1
         , t.m2, ( CASE WHEN NVL( b.fs, 0 ) = 0 THEN 1 ELSE b.fs END ) fs2
      FROM ( SELECT to_char( add_months( SYSDATE, -1 ), 'yyyymm' ) m1, to_char( add_months( SYSDATE, -2 ), 'yyyymm' ) m2 FROM dual ) t
             LEFT JOIN zzz a ON t.m1 = a.yf
             LEFT JOIN zzz b ON t.m2 = b.yf

用一下Lag或者Lead函数,一下就搞定了。