Oracle 如何判断 某个字段连续下降(根据时间判断)了三次 并且最后一次值小于60?
列如:
表结构:成绩表 t_score 含有有字段 student_id,score,time,is_countine_down
数据: 某个学生 在2020-01-01、2020-02-01、2020-03-01的成绩(score)分别为 80、65、55。此时将最后一次(2020-03-01)记录中的is_countine_down字段值改为 ‘yes’
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
把学生成绩查出来, 保存到一个list1里面, 然后把list1降序排列得到list2,比较两个list里面的东西顺序是否相等,如果相等,那么is_countine_down=yes,否则为no.
比如从数据库查出来的数据list1=[1,3,2],排序后得到list2=[3,2,1],那么list1和list2里面内容的顺序不相等,说明没有连续下降.
这里面有几个特殊情况,比如成绩不到3次,或者3次成绩都一样, 这个就看你的业务需求怎么处理了
update t_score set is_countine_down = 'yes' where student_id in (select t1.student_id from t_score t1, t_score t2, t_score t3 where t1.student_id = t2.student_id and t2.student_id = t3.student_id and t1.time = '2020-01-01' and t2.time = '2020-02-01' and t3.time = '2020-03-01' and t1.score > t2. score and t2.score > t3.score and t3.score < 60) and time = '2020-03-01';
time列比较时,如果是时间类型,注意需要转换一下格式
用自连接。自连接两次构造成。再去判断 成绩1 < 成绩2 < 成绩3,满足条件则update对应的列。
思路如上,代码自己实现咯。