group by max(Datum) und Count und vergleich mit 2ter tabelle

m1k3.heidelberg

Benutzer
Beiträge
6
Hallo liebe Leute,

ich habe eine dringend Anfrage:

Ich muss bei einer Archiv Tabelle das maximale Datum pro Leitzahl ermitteln und die Anzahl der Sätze zählen. Das ganze muss ich dann mit einer anderen Tabelle auch machen. Und bei Tabelle 1 und Tabelle 2 die Anzahl der Datensätze vergleichen. Somit soll automatisiert eine zu große Abweichung der Datensätze überprüft werden. Um Fehler bei der Archivierung zu erkennen.

Bitte um Hilfe, bin hier Anfänger!

Beispiel:

Tabelle1
Datum Leitzahl
01.01.18 1000
02.02.18 1000
02.02.18 2000
02.02.18 1000
02.02.18 1000
01.02.18 2000

Nach Datum und Leitzahl gruppieren und die Summe aller Sätze pro Leitzahl und Datum (count) ausgeben und das nur für das maximale(aktuelle) Datum

Ergebnis:
Datum Leitzahl Count
02.02.18 1000 3
02.02.18 2000 1

Tabelle 2
Datum Leitzahl Version
01.01.18 1000 2
02.02.18 1000 1
02.02.18 2000 2
02.02.18 1000 1
02.02.18 1000 2
01.02.18 2000 2

Nach Datum, Leitzahl, Version gruppieren und die Summe aller Sätze pro Leitzahl und Datum (count) ausgeben und das nur für das maximale(aktuelle) Datum

Ergebnis:
Datum Leitzahl Version Count
02.02.18 1000 1 2
02.02.18 1000 2 1
02.02.18 2000 2 1

Danach vergleichen wie sich die Anzahl der Sätze im Vergleich von Tabelle 2 zu Tabelle 1 verändert hat.

Ergebnis:
Leitzahl 1000 hat 1 Satz mehr in Tabelle1 im Verglech zu Tabelle 2 und Version 1.
Leitzahl 1000 hat 2 Sätze mehr in Tabelle1 im Vergleich zu Tabelle 2 und Version 2.
Leitzahl 2000 hat 1 Satz weniger in Tabelle1 im Vergleich zu Tabelle 2 und Version 2.
 
Werbung:
ich glaube, Deine dritte Ergebnisszeile ist falsch:

Code:
test=*# select * from tabelle1;
   datum    | leitzahl
------------+----------
 2018-01-01 |     1000
 2018-02-02 |     1000
 2018-02-02 |     2000
 2018-02-02 |     1000
 2018-02-01 |     2000
 2018-02-02 |     1000
(6 rows)

test=*# select * from tabelle2;
   datum    | leitzahl | version
------------+----------+---------
 2018-01-01 |     1000 |       2
 2018-02-02 |     1000 |       1
 2018-02-02 |     2000 |       2
 2018-02-02 |     1000 |       1
 2018-02-02 |     1000 |       2
 2018-02-01 |     2000 |       2
(6 rows)

test=*# with t1 as (select datum, leitzahl, count(1) from tabelle1 where datum = '2018-02-02' group by datum, leitzahl), t2 as (select datum, leitzahl, version, count(1) from tabelle2 where datum = '2018-02-02' group by datum, leitzahl, version) select t2.leitzahl, t1.count-t2.count as "Satz mehr in Tabelle1 im Vergleich zu Tabelle2", t2.version from t2 left join t1 on (t2.datum, t2.leitzahl)=(t1.datum,t1.leitzahl);
 leitzahl | Satz mehr in Tabelle1 im Vergleich zu Tabelle2 | version
----------+------------------------------------------------+---------
     1000 |                                              1 |       1
     1000 |                                              2 |       2
     2000 |                                              0 |       2
(3 rows)

test=*#

aber was ist eigentlich Deine Frage?
 
ERSTMALS Danke und hups da hast du recht.

Meine Frage ist wie das SQL aussehen muss um das Vergleichsergebnis zu bekommen:

test=*# with t1 as (select datum, leitzahl, count(1) from tabelle1 where datum = '2018-02-02' group by datum, leitzahl), t2 as (select datum, leitzahl, version, count(1) from tabelle2 where datum = '2018-02-02' group by datum, leitzahl, version) select t2.leitzahl, t1.count-t2.count as "Satz mehr in Tabelle1 im Vergleich zu Tabelle2", t2.version from t2 left join t1 on (t2.datum, t2.leitzahl)=(t1.datum,t1.leitzahl); leitzahl | Satz mehr in Tabelle1 im Vergleich zu Tabelle2 | version ----------+------------------------------------------------+--------- 1000 | 1 | 1 1000 | 2 | 2 2000 | 0 | 2 (3 rows)

Mein Problem ist noch, dass ich automatisch das maximale Datum der Tabelle 1 und Tabelle 2 erkennen muss. In deinem SQL (where Teil) hast du das Datum reingeschrieben. Gibts hier keine Möglichkeit das maximale Datum pro Leitzahl automatisch zu erkennen. Das SQL soll eine Art Prüfregel für die Daten-Archivierung sein. Es soll überprüfen ob die Anzahl pro Leitzahl im vergleich zum letzten Stichtag stark gesunken oder gestiegen ist. und es wäre noch super wenn das Datum das verglichen wird mit ausgegeben wird.

Die Tabellen haben in echt mehrere 100.000 Sätze mit verschiedenen Datumswerten usw.

ich hoffe ich bring das Problem halbwegs rüber. Leider ist es wirklich dringend :/
 
Danke, magst du mir das statement noch mit max schreiben, irgendwie hab ich das subselect im where teil nicht geschaft.

Where datum = (select max(datum) from tabelle1)

?
 
Werbung:
Zurück
Oben