当值从一个变为另一个时,我想返回值。
在下面的示例中,我想返回学生的姓名,考试编号和成绩,当他/她的成绩由ExamNum(从4升到最新)降级(从A到C)时。要返回的行在“返回”列中突出显示(该表没有返回列)。
例如,我想向Tom,4,B展示,因为他的成绩为3,但他的下一次考试为B(成绩为4)。
我什至不知道从哪里开始。
SELECT Student,ExamNum,Grade,RowNum = ROW_NUMBER()个 (按学生顺序排列,按考试数量排序) 来自dbo.Exam
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
答案 0 :(得分:4)
您可以使用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;
答案 1 :(得分:1)
如果您想截取实际改变成绩的那一刻,也可以基于触发器调用外部代码。
对于SQL Server女士:https://docs.microsoft.com/en-us/sql/advanced-analytics/java/howto-call-java-from-sql?view=sqlallproducts-allversions
您有两个主要方法。您可以进行轮询,也可以推送更改。