Knobelaufgabe für Experten T-SQL

02/12/2008 - 10:05 von Akiono Wan | Report spam
Hallo,
ich habe ein sehr spezielles Problem, welches ich mit einem Workaround
lösen konnte. Trotzdem wurmt mich die Lösung, da ich denke, dass es
eine Bessere geben muss.

Hier folgende Aufgabenstellung:

Ich möchte nur den ersten Treffer eine group by Gruppe bekommen.
Bsp.

Select * from Kunden group by Name (aber nur den ersten Treffer der
Kunden mit dem Namen z.B. Schmitz)


Soweit nicht besonders schwer, wenn man eine abgeleitete Tabelle und
eine Aggregatfunktion Max(), Min() etc. benutzt.

Diese Lösung ist aber eigentlich unbefriedigend, da dafür die
komplette Gruppe durchsucht werden muss, um das Min oder Max zu
bestimmen. Ist die Gruppe ausreichend gross, so schlàgt sich das
automatisch auf die Performance nieder.
Ich suche also nach einer Lösung, die wirklich ohne Aggregatfunktion
auskommt und den ersten Treffer der Gruppe anzeigt, ohne dass die
anderen Treffer der Gruppe betrachtet werden.
Meine Recherche war bisher nicht von Erfolg gekrönt, daher stelle ich
sie hier mal zur Diskussion.

Fröhliches posten
Akiono
 

Lesen sie die antworten

#1 Frank Kalis
02/12/2008 - 10:48 | Warnen spam
On 2 Dez., 10:05, Akiono Wan wrote:

ich habe ein sehr spezielles Problem, welches ich mit einem Workaround
lösen konnte. Trotzdem wurmt mich die Lösung, da ich denke, dass es
eine Bessere geben muss.

Hier folgende Aufgabenstellung:

Ich möchte nur den ersten Treffer eine group by Gruppe bekommen.
Bsp.

Select * from Kunden group by Name (aber nur den ersten Treffer der
Kunden mit dem Namen z.B. Schmitz)

Soweit nicht besonders schwer, wenn man eine abgeleitete Tabelle und
eine Aggregatfunktion Max(), Min() etc. benutzt.

Diese Lösung ist aber eigentlich unbefriedigend, da dafür die
komplette Gruppe durchsucht werden muss, um das Min oder Max zu
bestimmen. Ist die Gruppe ausreichend gross, so schlàgt sich das
automatisch auf die Performance nieder.
Ich suche also nach einer Lösung, die wirklich ohne Aggregatfunktion
auskommt und den ersten Treffer der Gruppe anzeigt, ohne dass die
anderen Treffer der Gruppe betrachtet werden.
Meine Recherche war bisher nicht von Erfolg gekrönt, daher stelle ich
sie hier mal zur Diskussion.




Kannst Du bitte mal anhand eines Beispiel erlàutern, was Du erreichen
möchtest? Und warum Du der Meinung bist, dass die Performance
Frank Kalis
Microsoft SQL Server MVP
Webmaster: http://www.insidesql.org

Ähnliche fragen