SQL使用top或其他命令提取数据

时间:2019-02-16 04:20:43

标签: mysql sql

我要做的是提取学生连续几年上学的数据

这是我要提取的数据示例……

studentID   years
__________|_______
A123        1992
B123        1991
B123        1990

在此示例中,如果我使用top(1),它将仅拉第一个,因为如果我指定年份,则将仅拉第一个,因为它的int是1992年大于1991年和1990年。因此,如果有人去过连续几年上学,但是在1992年之前的几年里,我将如何拔出合适的学生B123?

3 个答案:

答案 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;