Ich muss den Code nochmal schreiben. Ich habe in meiner ersten Antwort mit spitzen Klammern gearbeitet. Dabei hat der Editor einiges verschluckt.

Hallo,

kannst du nicht einfach mit SQL den passenden Satz abgreifen? Den Index würde ich dann nach "firma, kunde, artikel, datum desc" aufbauen.

select * from umsatz where firma=x and kunde=y and artikel=z order by datum desc fetch first row only;

oder, falls du alle aktuellsten verarbeiten willst:

with daten as (
select firma, kunde, artikel, max(datum) as maxDate from umsatz
group by firma, kunde, artikel)
select .* from daten
join umsatz on daten.firma=umsatz.firma and daten.kunde=umsatz.kunde and daten.artikel=umsatz.artikel and daten.maxDate = umsatz.datum;

So müsstest du alle aktuellsten Sätze aus deiner bekommen. Ich gehe mal davon aus, dass ein Artikel nur einmal pro datum vorkommt.

Das Statement kannst du dir auch als View ablegen.

Dieter