Oracle 如何判断 某个字段连续下降(根据时间判断)了三次 并且最后一次值小于60?

发布于 2022-09-12 13:19:06 字数 200 浏览 21 评论 0

列如:
表结构:成绩表 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夜雨飘雪 2022-09-19 13:19:06

把学生成绩查出来, 保存到一个list1里面, 然后把list1降序排列得到list2,比较两个list里面的东西顺序是否相等,如果相等,那么is_countine_down=yes,否则为no.
比如从数据库查出来的数据list1=[1,3,2],排序后得到list2=[3,2,1],那么list1和list2里面内容的顺序不相等,说明没有连续下降.

这里面有几个特殊情况,比如成绩不到3次,或者3次成绩都一样, 这个就看你的业务需求怎么处理了

决绝 2022-09-19 13:19:06

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列比较时,如果是时间类型,注意需要转换一下格式

无风消散 2022-09-19 13:19:06

用自连接。自连接两次构造成。再去判断 成绩1 < 成绩2 < 成绩3,满足条件则update对应的列。
思路如上,代码自己实现咯。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文