问题是现在是2022年5月份,我想求2022年4月份的月份和得分,通过4月份的得分,求出来3月份的得分和数据,如何写sql
上面这张是表结构
日期改一下就可以了
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函数,一下就搞定了。