如何更新除该组中最新项目之外的一组行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更新除该组中最新项目之外的一组行相关的知识,希望对你有一定的参考价值。

我需要能够更新表格中特定字段匹配的每一行,但不能更新匹配组的最新行。

让我们说吧

例:

我有10行:

  • 5行具有匹配字段,即Field1 = 23
  • 而另外5个具有匹配字段,例如,Field1 = 56

我需要更新每个匹配组中的4行,保持最新项目不变。

没有固定值,我不知道会有多少行或有多少组,上面只是一个例子。

谢谢您的帮助。

答案

您可以使用ROW_NUMBER()枚举行和CTE来定义要更新的结果集。使用行号,您可以有选择地更新每个分区的前4行:

;WITH ToUpdate AS (
   SELECT Field1,
          ROW_NUMBER() OVER (PARTITION BY Field1 ORDER BY myOrderColumnn) AS rn
   FROM mytable
   WHERE Field1 IN (23, 56)
)
UPDATE ToUpdate 
SET Field1 = 'myValue'
WHERE rn <= 4

如果您需要排除最后一项并且您不知道每个分区的精确填充,那么您可以反转排序并过滤掉第一条记录:

;WITH ToUpdate AS (
   SELECT Field1,
          ROW_NUMBER() OVER (PARTITION BY Field1 
                             ORDER BY myOrderColumnn DESC) AS rn
   FROM mytable
   WHERE Field1 IN (23, 56)
)
UPDATE ToUpdate 
SET Field1 = 'myValue'
WHERE rn > 1

以上是关于如何更新除该组中最新项目之外的一组行的主要内容,如果未能解决你的问题,请参考以下文章

如何根据列中的一组行对数据框进行排名?

如何填充一列以区分 Impala 组中的一组行与其他行?

如何仅在该特定组内按结果查找组中未排序的一组行?

注释掉 shell 脚本中的一组行

根据来自另一个表的匹配行查找表中的一组行

如何在 Kotlin 中使用 anko 删除除最新 10 条记录之外的所有记录?