选择除最后一行以外的所有行

kqlmhetl  于 2021-07-26  发布在  Java
关注(0)|答案(5)|浏览(342)

我有一个select查询 RowNumber() 函数,所以我在结果中有一个分区的行号。
我想达到什么目的?我想更新每个分区的所有行号,除了每个分区的最后一行。假设我们有行数 1,2,3,4 另一个分区 1,2 我想做一个update子句来更新除number以外的所有行号 4 (第一个分区)并排除行号 2 第二个分区的。
我知道我们可以在where子句中使用一个简单的条件排除第一行号,比如 RowNumber != 1 但是在这种情况下,我需要每个分区的最后一行的编号,而这个编号在所有分区中都是不同的。
我怎样才能做到这一点?当做

cgfeq70w

cgfeq70w1#

您可以使用一个可更新的cte,但是可以反转 order byrow_number() :

with toupdate as (
      < your query here but with DESC sort instead of ASC sort or vice versa >
     )
update toupdate
    set . . .
    where rownumber = 1;
uinbv5nw

uinbv5nw2#

因为您没有提供任何sql。根据您的问题,我可以考虑将结果放入子查询并使用最大行数。或者最好提供一些sql和示例数据,以便更清晰。

xytpbqjk

xytpbqjk3#

你可以改变主意 ORDER BY 从句 ASC to DESC 或者 DESC to ASC 您可以根据需要继续更新

Where RowNumber != 1
f4t66c6m

f4t66c6m4#

这也会起作用:

with temptbl as (
     select *,max(rn) over (partition by id order by somethingelse) rnmax from dbo.yourtable
     )
update temptbl
    set [whatever you plan on updating]
    where rn=rnmax;
egdjgwm8

egdjgwm85#

正如许多其他人所建议的那样,将顺序颠倒过来会使它简单得多,因为第1行是您不想更新的行。
一定要用

....
,row_number() over(partition by TEMP1 order by TEMP2 desc[or asc])
....

where rn <> 1

你应该走上正确的道路。

相关问题