Vaše první verze by měla fungovat s drobnými úpravami:
select A.*,
coalesce(V1, lag(V1 ignore nulls) over (order by data)) V2
from Tab1 A;
Tweak spočívá v odstranění partition by v1
z lag()
. coalesce()
je jen moje preference pro jednodušší výrazy.
Stejné vyladění by mělo fungovat i pro druhou verzi.
Vaše verze nefunguje, protože lag()
hodnota musí pocházet ze stejného oddílu (nebo musí být null
). Když máte partition by v1
, ve skutečnosti zajišťujete, že v1
má stejnou hodnotu jako v aktuálním řádku.