Muszę zrobić update kilkudziesięciu rekordów, chodzi o dodawanie czasu, ale dla ułatwienia napiszę liczby:
ID K1 K2 K3
1 8 12 20
2 22 18 40
3 40 13 53
4 53 10 63
Jak widać K1 = K3 dla poprzedniego wiersza, ale oprócz wiersza pierwszego/drugiego. A K3 = K1 + K2. Chodzi o to żeby zmienić wartości wierszy od 2 do 4 w taki sposób, żeby ta ciągłość była zachowana, czyli po updacie powinno wyglądać tak:
ID K1 K2 K3
1 8 12 20
2 20 18 38
3 38 13 51
4 51 10 61
Próbowałem coś takiego (piszę z głowy więc mogą być błędy)
UPDATE table as t1
LEFT JOIN table as t2 ON t1.ID = t2.ID -1
SET t1.K1 = t2.K3, t1.K3 = t1.K1 + t1.K2
WHERE t1.ID > 1
Ale zmianie podlega tylko pierwszy wiersz rekordów (czyli ID=2). Najwyraźniej każdy rekord jest updatowany na podstawie wartości sprzed wykonania zapytania, a ja bym chciał aby updatując każdy kolejny wiersz dane w poprzednim były już po zmianie. Nie wiem czy się tak da, pewnie celowo jest to zrobione w ten sposób, ale może jednak.
Albo może po prostu można to zrobić inaczej? Oczywiście mogę zrobić tyle zapytań ile rekordów i updatować pojedynczo, ale chciałem to zrobić jednym zapytaniem.
Można by to też zrobić w ten sposób, że na przykład pobieramy różnicę t1.K1-t2.K3 ładujemy ją do zmiennej i potem dodajemy w każdym wierszu do K1 i K3 ale...tego też nie wiem jak zrobić :D
Pomoże ktoś?
Ps. w tej chwili robię w MySQL, ale będę to przenosił na MS SQL, jak by dało radę to fajnie jak by zapytanie było zgodne dla obu baz