这个表的sql怎么写啊

111

FineReport 帆软用户Ps0Ug6VIyZ 发布于 2022-9-14 22:26 (编辑于 2022-9-17 10:39)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
0
weibwLv7高级互助
发布于2022-9-15 08:24

参考 https://ask.csdn.net/questions/7766892

 

with temp1 as

(select t.tname,

        t.inserttime,

        case when t.fr_grade>60 and t.sql_grade>60 and t.tomcat_grade>60 and (t.fr_grade+t.sql_grade+t.tomcat_grade+t.kettle_grade)>240  --三门必修均大于60且四门总大于240

             then 1

             else 0 end as is_pass,                                        --是否考核通过

        t.fr_grade+t.sql_grade+t.tomcat_grade+t.kettle_grade as sum_grade  --四门成绩总和

   from sql2002 t

     order by t.tname,t.inserttime)

     

select b.tname

       ,b.inserttime

       ,case when b.lag_is_pass is null then null   --上一考核日期不存在数据

             when b.lag_is_pass is not null and b.is_pass>b.lag_is_pass then '提高'   --本次考核通过,上次未通过

             when b.lag_is_pass is not null and b.is_pass=b.lag_is_pass and b.sum_grade>b.lag_sum_grade then '提高'  --本次和上次考核结果相同,本次总成绩比上次高

             when b.lag_is_pass is not null and b.is_pass=b.lag_is_pass and b.sum_grade=b.lag_sum_grade then '持平'  --考核结果和成绩都相同

        else '退步' end as is_grade_up             --成绩是否提高

  from     

(select a.tname

       ,a.inserttime

       ,a.is_pass    

       ,a.sum_grade

       ,lag(a.is_pass)over(partition by a.tname order by inserttime) as lag_is_pass      --上一考试日期是否通过

       ,lag(a.sum_grade)over(partition by a.tname order by inserttime) as lag_sum_grade  --上一考试日期四门成绩总和

  from temp1 a) b

  • 1关注人数
  • 270浏览人数
  • 最后回答于:2022-9-17 10:39
    请选择关闭问题的原因
    确定 取消
    返回顶部