oracle SQL使用update将值复制到前导行

oracle SQL使用update将值复制到前导行,sql,oracle,performance,propagation,Sql,Oracle,Performance,Propagation,我有一张有数百万条记录的表格。我有一些记录需要复制到下一行的值。 表A有以下列(A、B、C、D、E、F) 如果源值是 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

我有一张有数百万条记录的表格。我有一些记录需要复制到下一行的值。 表A有以下列(A、B、C、D、E、F) 如果源值是

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行的值与第1行的值相同,如果第2行的值为奇数

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
事情是iam使用一个简单的更新命令来执行此操作。这需要很长的时间,因为实际表有1000多万条记录,并且操作是在10列上执行的


有什么方法可以更快地将值传播到下一行吗?

只要A包含相邻的值,就应该这样做。 如果不是这种情况,则首先使用
row\u number()over(order by A)
,并相应地更改查询

理论上,n_值应该更适合,但我怀疑它有缺陷

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
;

谢谢Mat,我正要更新表格式。您可以显示您的更新查询或更好地解释更新数据的模式吗?您说过要用值更新奇数行,但它们是如何排序的?顺便说一句,这是一个糟糕的设计。我永远不会相信结果信息是正确的-即使你得到了你想要的更新方式。我只是给出了样本数据集,这不是一个简单的奇偶传播,在实际问题中,我将根据一组标准更新表,如列B1将不得不根据C1复制到B2。vauleslag是正确的方向。。目前尚不清楚2条记录的样本数据是否与他在现实生活中的数据相同,因此可能需要对其进行修改。@waiting,这是否符合您的需要?@waiting,很高兴听到。由于它回答了问题,请将此标记为正确答案