Zum Hauptinhalt springen

Die erstmalige Aggregation der selektierten Daten

Wir wissen jetzt, wie wir die Daten richtig selektieren, welche Tabellenart wir bei Lookups nutzen sollten und wie wir sicherstellen können, dass wir nur relevante Datensätze durchlesen.

In der Praxis ist es aber oft so, dass man erstmals eine größere und/oder nicht eindeutige Datenmenge von der Datenbank selektieren muss, die dann nach bestimmten Regeln fürs performante Nachlesen aggregiert werden sollte.

Abhängig vom Aggregationsverfahren wird unterschiedlich vorgegangen. Beim Summieren, Errechnen des Zählers oder des Durchschnitts muss man i. d. R. durch jeden Datensatz der internen Tabelle schleifen. Beim Ermitteln des Minimal- bzw. Maximalwertes geht es aber auch schneller. Dafür muss man die erhaltenen Datensätze sortieren und daraufhin mit der Anweisung DELETE ADJACENT DUPLICATES bereinigen. Dabei hat man die Möglichkeit, mittels des Zusatzes COMPARING zu bestimmen, welche Felder für den Vergleich berücksichtigt werden sollen.

Dies wird anhand des folgenden Beispiels verdeutlicht. Wir haben eine Datenquelle dbTab. Diese beinhaltet unter anderem 3 Schlüsselfelder, ein Lookup-Feld zum Nachlesen und ein Datumsfeld. Unser Ziel ist es, den Lookup-Wert nur für den letzten, aktuellsten Datensatz zu selektieren, damit wir diesen später performanter nachlesen können.

Zuerst selektieren wir alle o. g. Felder aus dbTab, für die eine entsprechende Schlüsselkombination in unserem result_package vorhanden ist.

SELECT

key_field1

key_field2

key_field3

date_field

lookup_field

FROM dbTab INTO TABLE iTab

FOR ALL ENTRIES IN result_package

WHERE key_field1 = result_package-key_field1

AND key_field2 = result_package-key_field2 AND key_field3 = result_package-key_field3

 

Hiermit haben wir mehrere Datumsfelder pro Schlüsselfeld, wobei wir nur das aktuellste benötigen.

key_field

key_field2

key_field3

date_field

lookup_field

A

B

C

20170101

1

B

C

D

20170101

2

C

D

E

20170101

3

A

B

C

20170301

4

B

C

D

20170301

5

C

D

E

20170301

6

A

B

C

20170501

7

B

C

D

20170501

8

C

D

E

20170501

9

 

Ganz wichtig ist es, die Ergebnistabelle zu sortieren, da sonst DELETE ADJACENT DUPLICATES nicht funktionieren würde.

SORT iTab BY key_field1 ASCENDING

        key_field2 ASCENDING

         key_field3 ASCENDING

         date_field DESCENDING

 

Somit haben wir sichergestellt, dass die interne Tabelle iTab so aussieht.

key_field

key_field2

key_field3

date_field

lookup_field

A

B

C

20170501

7

A

B

C

20170301

4

A

B

C

20170101

1

B

C

D

20170501

8

B

C

D

20170301

5

B

C

D

20170101

2

C

D

E

20170501

9

C

D

E

20170301

6

C

D

E

20170101

3

 

Nach der Anweisung DELETE ADJACENT DUPLICATES bleiben dann nur die relevanten Datensätze übrig und wir können uns auf ein performantes Nachlesen dieser Datensätze freuen. :)

DELETE ADJACENT DUPLICATES FROM iTab COMPARING key_field1 key_field2 key_field3 date_field.

key_field

key_field2

key_field3

date_field

lookup_field

A

B

C

20170501

7

B

C

D

20170501

8

C

D

E

20170501

9

München
b.telligent GmbH & Co. KG
Walter-Gropius-Straße 17
80807 München


Zürich
b.telligent Schweiz GmbH
Freigutstrasse 20
8002 Zürich