在 https://www.cnblogs.com/xiandedanteng/p/12327809.html 一文中,提到了三种求学生单科最新成绩的SQL可行性方案,这里还有另一种实现,那就是利用分析函数rank。

以下SQL语句就能让记录以学生id,科目id分组,然后按照创建时间逆序排名:

select tb_scoreflow.*,rank() over(partition by stuid,sbjid order by cdate desc) as seq from tb_scoreflow

seq字段就存储了排名,我们只需找出seq为1的记录就行了。

select * from (select tb_scoreflow.*,rank() over(partition by stuid,sbjid order by cdate desc) as seq from tb_scoreflow) a where a.seq=1

和左连,分组,反联三种方案取得的结果集一样,都是38条。

然后和分组方案比较一下结果集,发现是一样的。

实验到此结束,求学生单科最新成绩的可行性方案又增加一种。

实验用到的全部sql如下:

create table tb_scoreflow(
id number(6,0) primary key,
stuid number(6,0) not null,
sbjid number(6,0) not null,
score number(3,0) not null,
cdate date
) insert into tb_scoreflow
select rownum,
dbms_random.value(0,15),
dbms_random.value(0,5),
dbms_random.value(0,100),
to_date('2020-01-01','yyyy-MM-dd')+dbms_random.value(0,100)
from dual
connect by level<=50
order by dbms_random.random commit; select tb_scoreflow.*,rank() over(partition by stuid,sbjid order by cdate desc) as seq from tb_scoreflow select * from (select tb_scoreflow.*,rank() over(partition by stuid,sbjid order by cdate desc) as seq from tb_scoreflow) a where a.seq=1 select t1.*,t2.*
from
(select * from (select tb_scoreflow.*,rank() over(partition by stuid,sbjid order by cdate desc) as seq from tb_scoreflow) a where a.seq=1) t1 full join
( select
a.*
from
tb_scoreflow a ,
(select stuid,sbjid,max(cdate) as cdate from tb_scoreflow
group by stuid,sbjid) b
where
a.stuid=b.stuid and
a.sbjid=b.sbjid and
a.cdate=b.cdate
order by a.stuid,a.sbjid) t2
on (t1.id=t2.id)
where (t1.id IS NULL or t2.id IS NULL)

相关文章:

求学生单科流水表中单科最近/最新的考试成绩表的三种方案(可行性篇)

求学生单科流水表中单科最近/最新的考试成绩表的三种方案(结果集鉴别篇)

--2020-03-12--

求学生单科流水表中单科最近/最新的考试成绩表的新增可行性方案 使用Oracle提供的分析函数rank的更多相关文章

  1. R语言学习笔记:分析学生的考试成绩

    孩子上初中时拿到过全年级一次考试所有科目的考试成绩表,正好可以用于R语言的统计分析学习.为了不泄漏孩子的姓名,就用学号代替了,感兴趣可以下载测试数据进行练习. num class chn math e ...

  2. JAVA 数组实例-求学生成绩的最大成绩,获取数组中的最大值、最小值

    实例: import java.util.*; //求学生最大成绩 public class Test{ public static void main(String[] args){ System. ...

  3. [oracle/sql]写SQL从学生考试成绩三表中选出五门分综合超过720的尖子

    任务:有学生,科目,考分三张表,需要从中筛选出五门考分总和超过720的学生. 科目表最简单只有五条记录: CREATE TABLE tb_course ( id NUMBER not null pri ...

  4. 【翻译】Jay Kreps - 为何流处理中局部状态是必要的

    译者注: 原文作者是 Jay Kreps,也是那篇著名的<The Log: What every software engineer should know about real-time da ...

  5. Java求555 555的约数中最大的三位数。

    package org.llh.test; /** * 求555 555的约数中最大的三位数 * @author llh * */ public class Car { //整数j除以整数i(i≠0) ...

  6. 求N的阶乘N!中末尾0的个数

    求N的阶乘N!中末尾0的个数 有道问题是这样的:给定一个正整数N,那么N的阶乘N!末尾中有多少个0呢?例如:N=10,N=3628800,则N!的末尾有两个0:直接上干货,算法思想如下:对于任意一个正 ...

  7. hdu6003 Problem Buyer 贪心 给定n个区间,以及m个数,求从n个区间中任意选k个区间,满足m个数都能在k个区间中找到一个包含它的区间,如果一个区间包含了x,那么 该区间不能再去包含另一个数,即k>=m。求最小的k。如果不存在这样的k,输出“IMPOSSIBLE!”。

    /** 题目:hdu6003 Problem Buyer 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6003 题意:给定n个区间,以及m个数,求从n个区 ...

  8. CAD从二制流数据中加载图形(com接口Delphi语言)

    主要用到函数说明: _DMxDrawX::ReadBinStream 从二制流数据中加载图形,详细说明如下: 参数 说明 VARIANT varBinArray 二制流数据,是个byte数组 BSTR ...

  9. CAD从二制流数据中加载图形(com接口VB语言)

    主要用到函数说明: _DMxDrawX::ReadBinStream 从二制流数据中加载图形,详细说明如下: 参数 说明 VARIANT varBinArray 二制流数据,是个byte数组 BSTR ...

随机推荐

  1. 文件上传Upload 漏洞挖掘思路

    1:尽可能多的找出网站存在的上传点2:尝试使用如上各种绕过方法3:尝试 geshell4:无法上传webshel的情况下: 尝试上传html等,或可造成存储XSS漏洞 上传点构造XSS等,结合上传后的 ...

  2. 为什么我们需要Q#?

    原文地址:https://blogs.msdn.microsoft.com/visualstudio/2018/11/15/why-do-we-need-q/ 本文章为机器翻译. 你可能熟悉微软量子的 ...

  3. Compilation failed (return status=1): g++.exe: error: CreateProcess: No such file or directory错误

    windows10上 theano安装之后出现的问题 >>> import theano You can find the C code in this temporary file ...

  4. 年近而立,Java何去何从?

    摘要:各种新需求新应用层出不尽,各路新生代编程语言异军突起等等,Java未来会不会继续受欢迎?曾经备受关注的Java是否能紧跟时代步伐?新基建时代破茧重生引领云端未来潮流? 1995年第一个Java版 ...

  5. 【FJOI2007】轮状病毒 - Matrix-Tree定理

    题目描述 轮状病毒有很多变种.许多轮状病毒都是由一个轮状基产生.一个n轮状基由圆环上n个不同的基原子和圆心的一个核原子构成.2个原子之间的边表示这2个原子之间的信息通道,如下图所示. n轮状病毒的产生 ...

  6. 校内测试:T1秋末的落叶(命题人gxl)官方题解

    秋末的落叶 题解 传送门:https://www.luogu.com.cn/problem/U121886 Part 1:疏通题意 首先,我们从题意和样例解释中很容易提取到以下信息: \(1.\)本题 ...

  7. SpringBoot --- 自定义 Starter

    SpringBoot --- 自定义 Starter 创建 1.需要创建一个新的空工程 2.新的工程需要引入两个模块 一个Maven 模块 作为启动器 一个SpringBoot 模块 作为自动配置模块 ...

  8. Js中的各种高度问题

    一.屏幕宽高相关 屏幕高度就是你的整个屏幕高度(开机会亮的那片区域的高度),相关的其他高度划分很简单,就是以任务栏为分界线从而分为两部分. screen.height :屏幕高度. screen.wi ...

  9. java+opencv实现图像灰度化

    灰度图像上每个像素的颜色值又称为灰度,指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0.所谓灰度值是指色彩的浓淡程度,灰度直方图是指一幅数字图像中,对应每一个灰度值统计出具有该灰 ...

  10. es6中的Set和Map

    Set: (1)set的key是number类型,从0开始 (2)向 Set 加入值的时候,不会发生类型转换,5和"5"是两个不同的值 (3)当向Set add相同的值时,会去掉重 ...