Hallo #,
geg. sind folgenden Tabellen
Calc: CalcId Integer, CalcFrom Date, CalcTo Date
Calc_Person: CalcId Integer, PersonalId Integer
Calc_Data: CalcId Integer, PersonalId Integer, die Daten ...
In Calc stehen Abrechnungen, Calc_Person merkt sich die Personen, und in Calc_Data stehen
die Abrechnungsdaten für die Personen.
Ich benötige jetzt die Daten der letzten Abrechnung aller Personen.
Problem:
Falls eine Person von der Firma weg ist, steht sie in der letzten Abrechnung nicht drin,
dann muss ich ebend die vorletzte suchen usw.
Bisher mache ich das so (in einer Schleife für alle Personen ;( ).
- letzte Abrechnung der Person suchen
SQL-Code:
Select CalcId Where Calc Where CalcFrom<:CheckDate
Join Calc_Person On Calc_Person.CalcId=Calc.CalcId
Where Calc_Person.PersonalId=:PersonalId
Order By CalcFrom Desc
ein
First 1 baue ich noch ein, bringt bestimmt was, aber ich will weg von der Schleife.
die CalcId selbst kann ich nicht benutzen (autoInc), weil es infolge Replikation
verschiedene Nummernkreise gibt (CalcId=10000 kann eine ältere Abrechnung wie CalcId=10 sein).
- Daten ermitteln
SQL-Code:
Select * From Calc_Data
Where (CalcId=:CalcId) and (PersonalId=:PersonalId)
Das ganze "dauert", vor allem ist es abhängig von der Personenzahl.
Ich würde das gern über eine einzige
Query ohne SubSelect machen.
Als einzige Lösung fällt mir eine SP sein, dass will ich aber vermeiden.
Danke
Heiko