ciao Tos58,
[...]
Grazie per la tempestiva risposta.
[...]
prego!
[...]
Spero sia chiaro.
[...]
non molto....
[...]
La tabella è ordinata sul campo "chiave" decrescente in modo che il record con il valore del campo da modificare uguale a 0 segua quello corretto di cui prendere il valore e in questo modo con un ciclo ci si posiziona correttamente.
[...]
non si parla di ordine nelle tabelle....
data la tabella tabella1 :

ottengo quello che segue :

con il predicato sql :
UPDATE
tabella1 as T
INNER JOIN
tabella1 as t1 ON t.chiave = t1.chiave
SET t.valoreArt = t1.ValoreArt
WHERE
t1.valoreArt=(SELECT MAX(valoreArt) as MVA FROM tabella1 as t1 WHERE t1.chiave=t.chiave) and t.chiave is not null;
il predicato presuppone che il valore da sostituire sia univoco, da qui la domanda sul valore precedente.
L'aggregazione con Max esclude le righe a valore zero.
Precedente, ultimo, primo, successivo dipendono sempre dall'ordine specifico e come detto non non si parla ordinamento in una tabella per definizione.
I loop e i cursori si usano quando non ci sono alternative e quando si e' certi che non ce ne siano per certo la soluzione esce da qualche parte.
Nei database si predilgoono sempre soluzioni set based e non quelle iterative based.
Testa il predicato su una copia della tabella...mi raccomando!!!!! e per fare questo modifica il nome della tabella e dei campi con quelli propri del tuo scenario.
Facci sapere.
Sandro.