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