Mangels tiefgreifender
SQL-Kenntnisse liste ich testweise alle Vertäge auf und führe für jeden Vertrag die o.g. Schritte aus.
Du kannst alle Verträge vor dem 1.1.2011 (= 01.01.2012 - maxVertragslaufzeit) per
SQL wegfiltern.
Das müsste die Menge der Datensätze beträchtlich reduzieren.
Manche Dinge lassen sich einfach besser mit einer "richtigen" Programmiersprache berechnen und sind in
SQL eine Quälerei.
Wenn deine Zigarettenpause auf <= 20 Sekunden schrumpft dann würde ich bei der Clientseitigen Lösung bleiben.
Auf jeden Fall solltest du vermeiden, den Restbetrag mit
SQL zu berechnen.
Man kann alles mit
SQL machen (Quälerei) oder alles mit Delphi (langsam) oder man filtert nur alle Datensätze, die im Jahr 2012 noch laufen und bewerkstelligt die Berechnung mit einem Calculated Field (schnell & flexibel).