-- 获取增长率和同期供应量
with tmp01 as
(select a.*,
ifnull(b.供应量,c.供应量)as 上年供应量,
ifnull((a.生产总值/a.人口-b.生产总值/b.人口)/(b.生产总值/b.人口),0) as 增长率
from fact_gyl a left join fact_gyl b on a.日期-1=b.日期
-- 同期供应量为空,取数最新一次的供应量数据
left join (SELECT 供应量 from fact_gyl where 日期 in (select max(日期) from fact_gyl where 供应量 is not null)) c on 1=1)
SELECT a.日期,生产总值,人口,人均生产总值,供应量,上年供应量,AVG(b.增长率) as 平均增长率,上年供应量*(1+AVG(b.增长率)) as 预测供应量
FROM (select 日期,生产总值,人口,人均生产总值,供应量,上年供应量 from tmp01 where 日期>2021) a
left join (select 日期,增长率 from tmp01 ) b
on a.日期-3<=b.日期
and a.日期>b.日期
group by a.日期,生产总值,人口,人均生产总值,供应量,上年供应量
order by a.日期

--------------------------------------------------------
这点你确认么,这不是人均生产总值么
逻辑不难,主要两层逻辑:①求上上年供应量;②一个求近三年增长率,关键感觉你这个增长率逻辑有问题的
