Într-adevăr, UPDATE-ul de mai sus se face pe primele două înregistrări (aşa înţelesesem că trebuie). Dacă trebuie doar pe a doua înregistrare, atunci putem face ceva de genul:
UPDATE aaa SET Principal=0
WHERE DataInregistrare = (
SELECT MIN(DataInregistrare) FROM aaa b
WHERE b.CodContract=aaa.CodContract
AND DataInregistrare>(
SELECT MIN(DataInregistrare) FROM aaa c
WHERE c.CodContract=aaa.CodContract
)
AND DATEDIFF(month, DataInregistrare, (
SELECT MIN(DataInregistrare) FROM aaa d
WHERE d.CodContract=aaa.CodContract
))=0
ORDER BY DataInregistrare
)
Obs1: pentru ca performanţa să fie acceptabilă, ar fi bine să existe un index compus pe coloanele CodContract şi DataInregistrare.
Obs2: pentru a obţine rezultate corecte, ar trebui să ne asigurăm că nu există două înregistrări în aceeaşi dată, pe acelaşi contract; cu alte cuvinte, indexul menţionat mai sus ar trebui să fie unic.
Răzvan