我想在它从一个变化到另一个时返回值。
在下面的示例中,当他/她的成绩按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
您可以使用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;