我要做的是提取学生连续几年上学的数据
这是我要提取的数据示例……
studentID years
__________|_______
A123 1992
B123 1991
B123 1990
在此示例中,如果我使用top(1),它将仅拉第一个,因为如果我指定年份,则将仅拉第一个,因为它的int是1992年大于1991年和1990年。因此,如果有人去过连续几年上学,但是在1992年之前的几年里,我将如何拔出合适的学生B123?
答案 0 :(得分:0)
这是我对这个问题的理解,
您想获得Years
的最低值。
Student Years
A 1992
B 1994
C 1991
D 1990
所以我的假设是您想要1990年的D学生
为此,您可以
Select
top 1 Years
From
TableName
Order By Years Asc
答案 1 :(得分:0)
Select student
from (
Select student
,year
,year - row_number() over (partition by student order by year) as rnk
from tableName
)
group by rnk
having count(*)>1
order by count(*) desc;
假设您需要连续学习超过一年的学生。上面的查询将起作用。
如果您的mysql版本低于8.0,则必须重新编写行号逻辑,因为较低版本不支持分析功能。
希望这会有所帮助
答案 2 :(得分:0)
连续几年,您可以:
maths_rank
注意:这需要MySQL 8 +。
但是,为了您的成绩,您可能只想要最多年的学生。如果是这样:
Select student, min(year), max(year)
from (Select t.*,
row_number() over (partition by student order by year) as seqnum
from t
) t
group by student, (year - seqnum)
order by count(*) desc
limit 1;