dedlfix: knifflige Abfrage

Beitrag lesen

Hi!

Davon sollen jetzt pro Kunde nur jeweils die letzten x Einträge ausgegeben werden.
Ich bin kein Experte, aber der INNER JOIN müsste quasi geLIMITed werden... Hilft dir das?

LIMIT wirkt auf gesamte Querys. Hier wird aber eine Limitierung innerhalb einer Gruppe benötigt. Gruppierungen aber können nur zum Erstellen von Aggregat-Werten über diese Gruppe verwendet werden. Auch ein GROUP_CONCAT(), das mehrere Werte einer Gruppe liefern kann, hat keine LIMIT-Klausel. Das Problem auf der verlinkten Seite ist auch kein vergleichbares, denn dort wird nur ein Wert benötigt, was mit einer korrelierten Unterabfrage problemlos möglich ist. Hier aber werden mehr als einer benötigt, was damit nicht mehr geht. Prinzipiell wären korrelierte Unterabfragen der Weg zur Lösung, denn nur die können ohne zu gruppieren sich auf ein Kriterium eines Datensatzes der Hauptabfrage einschränken und auch noch ein LIMIT verwenden. Allerdings kann man eine Subquery, die mehrere Datensätze liefert, nur in der FROM-Klausel unterbringen. Dort muss sie aber selbständig sein, eine Korrelation kann man nicht aufbauen.

Ich denke nicht, dass das Problem mit einer Abfrage lösbar ist. Es lässt sich aber sicher eine Stored Procedure erstellen, in der man die benötigten Einzelschritte abarbeiten kann.

  • alle relevanten Kunden ermitteln, wobei ich grad nicht weiß, ob ein Cursor reicht oder auch eine tempräre Tabelle angelegt werden muss
  • eine temporäre Tabelle für die Auftragsdaten erstellen
  • über diese Menge iterieren und
      - für jede Kunden-ID eine Auftragsabfrage ausführen, inklusive der Limitierung
      - deren Ergebnisse zur temporären Auftragstabelle hinzufügen
  • die Kundendaten mit den Daten der temp. Auftragstabelle joinen

Lo!