查找SQL Server中值何时更改

时间:2019-02-16 00:09:08

标签: sql sql-server

当值从一个变为另一个时,我想返回值。

在下面的示例中,我想返回学生的姓名,考试编号和成绩,当他/她的成绩由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

2 个答案:

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

如果您想截取实际改变成绩的那一刻,也可以基于触发器调用外部代码。

对于oracle:https://docs.oracle.com/en/database/oracle/oracle-database/12.2/jjdev/calling-Java-from-database-triggers.html#GUID-5C498DEF-0348-484D-AA26-2A88EF348D5C

对于SQL Server女士:https://docs.microsoft.com/en-us/sql/advanced-analytics/java/howto-call-java-from-sql?view=sqlallproducts-allversions

您有两个主要方法。您可以进行轮询,也可以推送更改。