Hallo,

ich bin auf der Suche nach einem performanten SQL Ersatz für die RPG SETGT/READPE Kombination zur Ermittlung von Sätze mit einem "gültig ab" Datum.

Die Situation kennen sicherlich einige: Es gibt ein Tabelle mit Sätze die ein "gültg ab" Datum haben. Um für ein Datum nun den richtigen Satz zu finden, bediene ich mich der SETGT und READPE Operationen:

Code:
setgt (yKey:yDatum) tabelle;
readpe (yKey) tabelle;      
if not %eof();                             
  return yWert;                       
endif;
Ich suche nun eine performante Lösung dafür in SQL.

Um das gleiche Ergebnis für die Problematik zu bekommen, fallen mir zwei Varianten ein um den Wert zu ermitteln:

Variante 1:

Code:
SELECT wert                  
FROM   Tabelle
WHERE  key=:yKey                  
       AND gueltig_ab<=:yDatum        
ORDER BY gueltig_ab DESC              
FETCH FIRST ROW ONLY
Variante 2:

Code:
SELECT wert                              
FROM   tabelle                 
WHERE  key=:yKey                            
       AND gueltig_ab=                           
          (SELECT MAX(gueltig_ab)                
           FROM   tabelle      
           WHERE  key=:yKey                  
                  AND gueltig_ab<=:yDatum        
          );

Ich habe ein kleine Testfall aufgebaut, der die Routinen unter gleichen Bedingungen mehrere 1000x durchführt. Dabei kommen folgende Zeiten raus:

SETGT/READPE: 1,788
SQL Variante 1: 13,381
SQL Variante 2: 12,445

Die SQL-Variante mit dem Subselect ist etwas schneller als die Variante mit ORDER BY. Beide sind aber deutlich langsamer als die SETGT/READPE-Variante.

Hat jemand noch eine Idee, wie mit SQL diese Problematik besser gelöst werden kann?

Gruß
Martin