Tach!
Für mich macht das eigentlich auch keinen Sinn. Welcher Datensatz soll man anzeigen, welcher nicht?
Nun, der Aufgabensteller wird sich vielleicht was gedacht haben, wenn er zur Bestellung nur einen Artikel sehen möchte. Aber was? Kannst du ihn nicht fragen? Eine Summe der Artikelpreise oder die Anzahl der Posten kann man sich ja noch ohne weitere Begründung als sinnvoll vorstellen.
Belassen wir es einmal dabei: Wäre es technisch bzw. per SQL möglich?
Es gibt technische Lösungen nur, wenn ein Algorithmus oder eine Regel definierbar ist. Ohne Klärung der obigen Frage geht es also nicht.
Um es per Join realisieren zu können, muss du entweder die Join-Bedingung so formulieren, dass lediglich ein Datensatz entsteht, und dazu wissen, anhand welcher Merkmale dieser selektiert werden kann. Das müssen aber eigene Werte sein, keine Metawerte wie erster/letzter/jüngster von mehreren. Oder der Wert lässt sich per Correlated Subquery ermitteln.
Eine Alternative wäre, wenn du es anhand der gejointen Menge schaffst, mittels Having die ungewünschten Datensätze herauszuwerfen. Das stelle ich mir aber schwer vor, weil man dafür ja die anderen Datensätze der Bestellung mit berücksichtigen muss, das Having aber nur auf einen schauen kann. Oder es kommt wieder eine Correlated Subquery zu Hilfe. Zu bevorzugen wäre aber die Join-Bedingungsvariante, weil dabei keine unnötig große Zwischenmenge entsteht.
Eine weitere Möglichkeit, die mir einfällt, ist mehrstufig. Gruppiere die Artikel per Bestellung, finde den Wert, der den einen Datensatz genau identifiziert, den du pro Gruppe haben möchtest. Das muss für alle Gruppen erfolgen. Dann kannst du anhand dieser Werte ein Select formulieren mit WHERE id IN (deine ermittelte Liste) und diese Menge an die Bestellungen joinen. Es muss nicht IN() sein, aber irgendwie so nach diesem Prinzip.
Wenn es um den ersten oder letzten einer sortieren Gruppe geht, denkst du vielleicht an sowas wie LIMIT bei MySQL oder TOP bei MS-SQL, aber das wirkt ja nur auf die gesamte (Teil-)Menge, nicht auf Gruppen, ist also nicht der Weg zum Ziel beim Gruppieren. Wohl aber in einer Correlated Subquery.
Zu guter Letzt gibt es auch noch den Weg ohne Join allein mit einer Correlated Subquery in der SELECT-Klausel. Aber die kann an der Stelle nur einen einzigen Wert liefern und ist weniger geeignet, wenn mehrere Daten des Artikels in der Ergebnismenge enthalten sein sollen. Das müsste sonst je Wert eine eigene Subquery sein.
Alles in allem steht oder fällt die Realisierbarkeit, wie schon gesagt, mit der Kenntnis des Auswahlkriteriums.
dedlfix.