MySQL数据库需要写一个sql:预测供应量=上一年供应量*近三年增长率的平均值

表中有日期,生产总值,人口,人均生产总值,供应量(需要预测的),几个字段

需要写一个sql:求出预测2022,2023供应量

样例数据:

日期  、生产总值 、人口、 人均生产总值、 供应量 

2023、17888、1344、138888、求23年预测供应量

2022、16311.3、1366、126666、求22年预测供应量

2021 、15666 、  1373  、113660、123.45

2020、14007、1387、101068、  117.03

2019、13333、1399、100001、106.02

逻辑:A=每年(生产总值/人口)的增长率

         预测供应量=上一年供应量*近三年A的平均值

受累写的详细点拜托啦 非常感谢

SQL mmc0112 发布于 2023-9-8 11:57 (编辑于 2023-9-8 13:46)
1min目标场景问卷 立即参与
回答问题
悬赏:15 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
weibwLv7高级互助
发布于2023-9-8 16:25

给个基础逻辑,可以在这上面改

with m as ( SELECT a.* ,b.rjsczz '去年人均生产总值' ,(a.rjsczz-b.rjsczz)/b.rjsczz '人均生产总值增长率' FROM a_a a left join a_a b on YEAR(STR_TO_DATE(b.nd,"%Y"))=YEAR(STR_TO_DATE(a.nd,"%Y"))-1 ) select m1.* ,m2.人均生产总值增长率 '去年增长率' ,m3.人均生产总值增长率 '去前年增长率' ,sum(m1.人均生产总值增长率+m2.人均生产总值增长率+m3.人均生产总值增长率)/3 '近三年平均增长率' from m m1 left join m m2 on YEAR(STR_TO_DATE(m2.nd,"%Y"))=YEAR(STR_TO_DATE(m1.nd,"%Y"))-1 left join m m3 on YEAR(STR_TO_DATE(m3.nd,"%Y"))=YEAR(STR_TO_DATE(m1.nd,"%Y"))-2

最佳回答
0
Z4u3z1Lv6专家互助
发布于2023-9-8 11:59

给个建议:复杂SQL 用存储过程来处理

  • mmc0112 mmc0112(提问者) 写啥都行。。。只要能实现 主要现在是不会写啊
    2023-09-08 12:15 
  • Z4u3z1 Z4u3z1 回复 mmc0112(提问者) mysql我也不咋会 你参考 https://blog.csdn.net/q1y2y3/article/details/131365665 这个教程写吧
    2023-09-08 12:39 
最佳回答
0
坚定的小帆薯Lv6高级互助
发布于2023-9-8 13:22(编辑于 2023-9-8 15:52)

-- 获取增长率和同期供应量

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.日期

image.png

--------------------------------------------------------

这点你确认么,这不是人均生产总值么

逻辑不难,主要两层逻辑:①求上上年供应量;②一个求近三年增长率,关键感觉你这个增长率逻辑有问题的

image.png

最佳回答
0
用户bBKn44909079Lv3见习互助
发布于2023-9-8 14:00
  • 3关注人数
  • 417浏览人数
  • 最后回答于:2023-9-8 16:25
    请选择关闭问题的原因
    确定 取消
    返回顶部