当前位置: 首页 > 知识库问答 >
问题:

在SQL Server中值更改时查找

谢运良
2023-03-14

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

在下面的示例中,当他/她的成绩按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个答案

柯凯旋
2023-03-14

您可以使用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;
 类似资料:
  • 问题内容: 我读过这个问题:更改集合中的元素会更改“等于”语义 但是,我不知道如何解决无法更改HashSet中的项并稍后将其删除的问题。 我有一些示例源代码: 其中TestClass只是一个POJO,它拥有一个变量(加上getter和setter),并实现了hashcode()和equals()。 有人要求显示equals()和hashcode()方法。这些是由eclipse自动生成的: 结果如下

  • 问题内容: 我将从显示代码开始: 什么是SQLite3代码,将可乐行的价格列的值更改为12。 所以我希望输出为可乐12 sprite 9。 谢谢大家! 问题答案: 这些可能只是转录错误或错别字,但您应该从语句中删除单词,并且在列名周围不需要单引号,因此该语句应类似于:

  • 问题内容: 我在SQL Server中运行合并。在我的更新中,我只想更新值已更改的行。版本行在每次更新时都会递增。下面是一个示例: 现在,如果我只想更新行,从而增加版本,则仅在名称更改的情况下。 问题答案: 可以有。另外,无需更新。 如果Last_Name或First_Name可为空,则例如在比较trg.Last_Name <> src.Last_Name时,需要注意值。

  • 问题内容: 假设我有以下几种类型: 我想迭代节点的属性以更改它们。 我本来希望能够做到: 但是由于不是指针,所以这行不通,我必须这样做: 有没有更简单或更快速的方法?是否可以直接从中获取指针? 显然,我不想仅仅为了迭代而更改结构,更冗长的解决方案不是解决方案。 问题答案: 不,您想要的缩写是不可能的。 原因是从您要遍历的切片中复制值。关于范围的规范说: value (if 2nd variable

  • 我是新来的Laravel我想做的只是如下: 我的表单中有一些字段,如标题、描述。 标题字段在数据库中是唯一的。 这就是我所做的来更新我的价值观。 但这将导致错误(该值已经存在),因为我的标题字段是唯一的。 我只想在标题值更改时更新标题,否则更新相同的值,但更新其他字段。谢谢

  • 数组仍然具有它的原始值,是否有任何方法可以通过迭代函数对数组的元素进行写访问?