窃_格瓦拉 2022-03-10 11:51 采纳率: 100%
浏览 70
已结题

计算近几周数据然后汇总,sql问题

需求如图

img

get_water 为饮水量,没有的周数用0填充,如图,上一周没有任何数据

img

  • 写回答

5条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-03-10 14:04
    关注

    mysql 8.0以上版本,可以使用with递归补充中间缺失的数据。
    但有点恶心的是mysql这个recursive只能放在第一个with后面,所以后面的统计每周的汇总sql只能一模一样写两次了

    create table t_user_consume_log(
    get_water DECIMAL(20,2),remark VARCHAR(200),flag TINYINT(1),
    create_time datetime
    );
    insert into t_user_consume_log values (2600,'',1,now());
    insert into t_user_consume_log values (2600,'',1,date_add(now(),interval -1 day));
    insert into t_user_consume_log values (2600,'',1,date_add(now(),interval -7 day));
    insert into t_user_consume_log values (2600,'',1,date_add(now(),interval -20 day));
    
    with
    recursive cte as (
    select 0 wd,ifnull((select s from (
    select 
    WEEK( now() )- WEEK( create_time ) wd,
    sum(get_water) s
    from t_user_consume_log 
    group by WEEK( now() )- WEEK( create_time )) d where wd=0),0) s 
    union all
    select cte.wd+1,ifnull(d.s,0) from cte left join (
    select 
    WEEK( now() )- WEEK( create_time ) wd,
    sum(get_water) s
    from t_user_consume_log 
    group by WEEK( now() )- WEEK( create_time )) d on cte.wd+1=d.wd
    where cte.wd<=11
    )
    select concat('近',wd+1,'周') 时间,
    '17500ml' 目标饮水量,
    concat(s,'ml') 实际饮水量,
    concat(round(s/17500*100,2),'%') 完成进度,
    case when s>=17500 then '达标' else '不达标' end 是否达标
    from cte
    

    img


    如果是mysql8.0以下,可以构造一个虚拟的列(可以用系统表),然后left join 上面汇总好的数据

    select concat('近',help_topic_id+1,'周') 时间,
    '17500ml' 目标饮水量,
    concat(ifnull(s,0),'ml') 实际饮水量,
    concat(round(ifnull(s,0)/17500*100,2),'%') 完成进度,
    case when s>=17500 then '达标' else '不达标' end 是否达标
    from mysql.help_topic a left join (select 
    WEEK( now() )- WEEK( create_time ) wd,
    sum(get_water) s
    from t_user_consume_log 
    group by WEEK( now() )- WEEK( create_time )) b 
    on b.wd=a.help_topic_id
    where help_topic_id<=13
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月11日
  • 已采纳回答 3月10日
  • 创建了问题 3月10日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题