tenho que atualizar uma coluna de uma tabela com a informacao de um campo da mesma tabela, so q da linha anterior.
ex.
a tabela tem as coluna
nupatrimonio, nuhistoricobem, cdsetorobra, cdsetorinicial, cdtipomovimento
a coluna q preciso atualizar eh o cdsetorinicial com a informacao da coluna cdsetorobra
eu empaquei update esipHistoricoBem h set h.cdSetorInicial = h.cdsetorobra where h.cdtipomovimento = 1 and h.nuhistoricobem = nuhistoricobem - 1
so q tem um problema, nuhistoricobem nao necessariamente existirar o valor -1 ou seja
se eu esiver atualizando o 20, o 19 pode nao existir e sim o 12, ou ser o unico, neste caso eu atualizo com o cdsetorobra dele mesmo.
Foi criado uma coluna temporaria, sequenciada, e feito update pela coluna -1.
Banco utilizado: Firebird
ALTER TABLE ESIPHISTORICOBEM ADD NUORDEM DECIMAL(9,0);
CREATE SEQUENCE GEN_Esiphistoricobem;
update esiphistoricobem
set cdsetorinicial = null;
UPDATE Esiphistoricobem A
SET A.NUORDEM =GEN_ID(GEN_Esiphistoricobem, 1)
WHERE A.nupatrimonio=(SELECT X.NUPATRIMONIO FROM ESIPHISTORICOBEM X
WHERE X.nupatrimonio=A.nupatrimonio
group BY X.NUPATRIMONIO)
ORDER BY nupatrimonio,nuhistoricobem
UPDATE Esiphistoricobem A
SET A.cdsetorinicial= (select b.cdsetorinicial from esiphistoricobem b where
A.nuordem=b.nuordem-1 and a.nupatrimonio=b.nupatrimonio);
UPDATE Esiphistoricobem A
SET A.cdsetorinicial=A.cdsetorobra
where cdsetorinicial is null
ALTER TABLE ESIPHISTORICOBEM DROP NUORDEM;
DROP SEQUENCE GEN_ESIPHISTORICOBEM;