A B C D E F
1 1-Jan 1 abcd 1-Jan abcde
2 1-Feb 0 abcd 1-Feb def
3 ghi
4 jkl
5 mno
6 pqr
7 stu
8 xyz
9 defg
我必须以下列方式将这些值粘贴到前导行。 如果即使与第1行具有相同的值,如果它与row2的奇数相同,我试图更新下一行。
A B C D E
1 1-Jan 1 abcd 1-Jan
2 1-Feb 0 abcd 1-Feb
3 1-Jan 1 abcd 1-Jan
4 1-Feb 0 abcd 1-Feb
5 1-Jan 1 abcd 1-Jan
6 1-Feb 0 abcd 1-Feb
7 1-Jan 1 abcd 1-Jan
8 1-Feb 0 abcd 1-Feb
9 1-Jan 1 abcd 1-Jan
使用简单的更新命令来执行此操作。这需要很长时间,因为实际表有超过1000万条记录,并且操作在10列上执行。
有没有什么方法可以更快地将值传播到下一行?
答案 0 :(得分:1)
只要A包含相邻的值,那就应该这样做。
如果不是这种情况,请使用row_number() over (order by A)
作为第一步并相应地更改查询。
理论上NTH_VALUE应该更合适,但我怀疑它有一个错误。
select A
,lag (B,floor((A-1)/2)*2) over (order by A) as B
,lag (C,floor((A-1)/2)*2) over (order by A) as C
,lag (D,floor((A-1)/2)*2) over (order by A) as D
,lag (E,floor((A-1)/2)*2) over (order by A) as E
from t
;
N行的一般情况是
select A
,lag (B,floor((A-1)/N)*N) over (order by A) as B
,lag (C,floor((A-1)/N)*N) over (order by A) as C
,lag (D,floor((A-1)/N)*N) over (order by A) as D
,lag (E,floor((A-1)/N)*N) over (order by A) as E
from t
;