Supportnet / Forum / Datenbanken
Access höchster Wert aus zwei Tabellen suchen
Frage
Ich habe zwei vom Aufbau her identische Tabellen eine Aktuelle Tabelle und eine Archivtabelle (alte Datensätze). Nun muss ich aus einem Feld in beiden Tabellen den höchsten Wert suchen, wobei der höchste Wert in der aktuellen und auch in der Archivtabelle sein kann. Wie komme ich am unkompliziertesten an den Wert?
Antwort 1 von mapet
Hallo
Erstelle ein Abfrage mit beiden Tabellen.
Nimm bei beiden das Zielfeld - gehe auf Gruppieren und wähle bei beiden maximum
Dann musst Du nur noch zwei Werte vergleichen
mapet
Erstelle ein Abfrage mit beiden Tabellen.
Nimm bei beiden das Zielfeld - gehe auf Gruppieren und wähle bei beiden maximum
Dann musst Du nur noch zwei Werte vergleichen
mapet
Antwort 2 von ElBobbele
Hallo mapet!
Mit der Lösung könntest du bebe ein dickes Ei ins Nest legen. Wenn du zwei Tabellen in eine Abfrage hinzufügst und keine Beziehung definierst, dann kombiniert die Abfrage jeden Datensatz aus der einen Tabelle mit jedem Datensatz aus der anderen Tabelle. Erst dann wird Max() auf der Datenmenge ausgeführt.
Enthalten beide Tabellen jeweils 10.000 Datensätze, dann sind das 10.000 x 10.000 = 100.000.000. Über diese Datenmenge laufen dann zwei Max-Funktionen. Ich habe das Szenario mal ausprobiert und komme dabei auf eine Abfragedauer von 2 Min 29 Sek.
Ich würde deswegen zwei einzelne Abfragen empfehlen, die ihrerseits mit Max() den höchsten Wert ermitteln. Beide Abfragen sind Teil einer anschliessenden Union-Abfrage, über die dann wieder ein Max() läuft. Bei der gleichen Datenmenge braucht diese Abfrage bei mir annähernd 0,0 Sekunden:
Gruss
El Bobbele
Mit der Lösung könntest du bebe ein dickes Ei ins Nest legen. Wenn du zwei Tabellen in eine Abfrage hinzufügst und keine Beziehung definierst, dann kombiniert die Abfrage jeden Datensatz aus der einen Tabelle mit jedem Datensatz aus der anderen Tabelle. Erst dann wird Max() auf der Datenmenge ausgeführt.
Enthalten beide Tabellen jeweils 10.000 Datensätze, dann sind das 10.000 x 10.000 = 100.000.000. Über diese Datenmenge laufen dann zwei Max-Funktionen. Ich habe das Szenario mal ausprobiert und komme dabei auf eine Abfragedauer von 2 Min 29 Sek.
Ich würde deswegen zwei einzelne Abfragen empfehlen, die ihrerseits mit Max() den höchsten Wert ermitteln. Beide Abfragen sind Teil einer anschliessenden Union-Abfrage, über die dann wieder ein Max() läuft. Bei der gleichen Datenmenge braucht diese Abfrage bei mir annähernd 0,0 Sekunden:
SELECT Max(TempZahl) AS Ergebnis
FROM (
SELECT Max(Zahl) AS TempZahl
FROM tblAktuell
UNION
SELECT Max(Zahl) AS TempZahl
FROM tblArchiv
) AS Temp;
Gruss
El Bobbele
Antwort 3 von mapet
Hallo
@bobbele sorry war ein grober schnitzer, ist eben ein Grundsatz von mir dass die Tabellen verknüpft sein müssen (von ganz wenigen besonderheiten abgesehen. sorry
mapet
@bobbele sorry war ein grober schnitzer, ist eben ein Grundsatz von mir dass die Tabellen verknüpft sein müssen (von ganz wenigen besonderheiten abgesehen. sorry
mapet
Antwort 4 von ElBobbele
Hi mapet!
Dank deines "Schnitzers" wurde ein wichtiger Punkt zur Abfrage-Performance angesprochen. Wenn jetzt einige Supportnet-Nutzer von den Erläuterungen profitieren können, dann war es das wert. :-)
Gruss
El Bobbele
Dank deines "Schnitzers" wurde ein wichtiger Punkt zur Abfrage-Performance angesprochen. Wenn jetzt einige Supportnet-Nutzer von den Erläuterungen profitieren können, dann war es das wert. :-)
Gruss
El Bobbele
Antwort 5 von bebe
Hallo el bobbele
vielen Dank für die Hilfe.
Ich habe dadurch das Problem gelöst, allerdings hat mein Access die verschachtelte From Anweisung nicht akzeptiert; es hat die runde Klammer immer durch eine eckige Klammer ersetzt und dann eine Fehlermeldung auf die Select Anweisung gebracht. Habe ich etwas falsch gemacht?
Ich habe nun die beiden Höchstwerte der einzelnen Tabellen ermittelt, über die Union Abfrage miteinander verbunden und über eine zusätzliche Abfrage den Maximalwert ermittelt.
vielen Dank für die Hilfe.
Ich habe dadurch das Problem gelöst, allerdings hat mein Access die verschachtelte From Anweisung nicht akzeptiert; es hat die runde Klammer immer durch eine eckige Klammer ersetzt und dann eine Fehlermeldung auf die Select Anweisung gebracht. Habe ich etwas falsch gemacht?
Ich habe nun die beiden Höchstwerte der einzelnen Tabellen ermittelt, über die Union Abfrage miteinander verbunden und über eine zusätzliche Abfrage den Maximalwert ermittelt.
Antwort 6 von ElBobbele
Hallo bebe!
Die eckigen Klammern sehen sicher so aus:
Access stellt i.d.R. von runden Klammern auf eckige Klammern um (spätestens beim Speichern?). Wenn dann innerhalb der Klammern ein Tabellen- oder Feldnamen mit Leerzeichen enthalten ist, dann müsste dieser Name ebenfalls in eckige Klammern gesteckt werden. Mit verschachtelten Klammern kann Access aber nicht umgehen.
Achte deswegen darauf, dass diese Namen keine Leerzeichen enthalten, dann sind die Extra-Klammern nicht nötig.
Im Zweifel spricht nichts dagegen, die Unterabfragen als eigenständige Abfragen abzuspeichern und sie dann als Unterabfragen einzubinden, dann klappt das garantiert.
Gruss
El Bobbele
Die eckigen Klammern sehen sicher so aus:
sqlsqlsql [ sqlsqlsql ]. AS Temp sqlsqlsql
Access stellt i.d.R. von runden Klammern auf eckige Klammern um (spätestens beim Speichern?). Wenn dann innerhalb der Klammern ein Tabellen- oder Feldnamen mit Leerzeichen enthalten ist, dann müsste dieser Name ebenfalls in eckige Klammern gesteckt werden. Mit verschachtelten Klammern kann Access aber nicht umgehen.
Achte deswegen darauf, dass diese Namen keine Leerzeichen enthalten, dann sind die Extra-Klammern nicht nötig.
Im Zweifel spricht nichts dagegen, die Unterabfragen als eigenständige Abfragen abzuspeichern und sie dann als Unterabfragen einzubinden, dann klappt das garantiert.
Gruss
El Bobbele