提问者:小点点

在SQL Server中值更改时查找


我想在它从一个变化到另一个时返回值。

在下面的示例中,当他/她的成绩按examnum(从A到C)顺序下降(4是最近的考试)时,我想返回studentname、examnum和grade。要返回的行在Return列中突出显示(该表没有Return列)。

例如,我想给Tom,4,B看,因为他在考试3中得了A,但在下一次考试中他得了B(考试4)。

我甚至不知道从哪里开始。

从dbo.exam中选择Student、ExamNum、Grade、rownum=ROW_NUMBER()(按StudentORDER按ExamNum分区)

    Student  ExamNum  Grade   Return
Tom              1      B
Tom              2      A
Tom              3      A
Tom              4      B       *
Angela           1      B
Angela           2      B
Angela           3      A
Angela           4      B       *
Shawn            1      A
Shawn            2      C       *
Shawn            3      A
Shawn            4      A

共1个答案

匿名用户

您可以使用lag():

select e.*
from (select e.*,
             lag(e.grade) over (partition by e.student order by e.examNum) as prev_grade
      from exam e
     ) e
where e.grade < e.prev_grade;