Andreas Greiner: MS-Sql:Gleiche Einträge nur 1 mal ausgeben

Liebe SelfhtmlerInnen!

Ich habe folgendes Problem:

Ich habe folgende Tabelle:

Name | Nummer

Max | 1
Max | 10
Max | 100
Ilse | 2
Ilse | 20
Ilse | 200
Hias | 3
Hias | 30
Hias | ...

Jetzt möchte ich daraus immer nur 1 Max, 1 Ilse und 1nen Hias mit der niedrigsten Nummer.

Ich hoffe ich habe das verständlich dargebracht.

Hat jemand eine Idee von euch?

lg,
Andi

  1. Liebe SelfhtmlerInnen!

    Ich habe folgendes Problem:

    Ich habe folgende Tabelle:

    Name | Nummer

    Max | 1
    Max | 10
    Max | 100
    Ilse | 2
    Ilse | 20
    Ilse | 200
    Hias | 3
    Hias | 30
    Hias | ...

    Jetzt möchte ich daraus immer nur 1 Max, 1 Ilse und 1nen Hias mit der niedrigsten Nummer.

    Ich hoffe ich habe das verständlich dargebracht.

    Hat jemand eine Idee von euch?

    lg,
    Andi

    Entweder gehts mit "SELECT DISTINCT", oder du gruppierst und nimmt die niedrigste Nummer mit "SELECT MIN(nummerspalte) AS minnummer,weiterespalten WHERE ... GROUP BY namespalte".

    - Sven Rautenberg

  2. Hi Andy

    Max | 1
    Max | 10
    Max | 100
    Ilse | 2
    Ilse | 20
    Ilse | 200
    Hias | 3
    Hias | 30
    Hias | ...

    Jetzt möchte ich daraus immer nur 1 Max, 1 Ilse und 1nen Hias mit der niedrigsten Nummer.

    Was du brauchst, ist group by der select müsste dann so aussehen ca.

    select name, min(nummer)
      from tabelle
      where bedingungen
      group by name
      order by sorts

    select distinct wie Sven vorschlägt wird dir wenig bringen da der nicht zwingend den niedrigsten Eintrag bringt sondern im Normalfall den Eintrag, der als erster in der DB war, wobei man sich auch darauf nicht verlassen kann.

    Gruss Daniela

    1. Hallo,

      select distinct wie Sven vorschlägt wird dir wenig bringen da der nicht zwingend den niedrigsten Eintrag bringt sondern im Normalfall den Eintrag, der als erster in der DB war, wobei man sich auch darauf nicht verlassen kann.

      Bzw. ist 'min()' ohne 'group by' nicht möglich, und 'distinct' würde wieder alle DatenSätze bringen, sofern keine Doubletten (name _und_ nummer sind gleich wie bei einem anderen Record) vorliegen.

      Also bleibt nur die von Dir vorgeschlagene Lösung. Wobei, der Vollständigkeit halber, dazugesagt werden sollte, daß, sollten zusätzliche Spalten ausgegeben werden, diese entweder auhc mit 'group by' erfasst oder aber mittels Aggregat-Funktion (min(),max(),sum()...) abgefragt werden.

      Grüße
        Klaus

      1. Hoi,

        Bzw. ist 'min()' ohne 'group by' nicht möglich

        Das ist so nicht wahr, zumindest nicht fuer alle DBMS.

        SELECT MIN/MAX/SUM/...(spalte) FROM tabelle

        Sollte sowohl bei MySQL als auch bei PostGreSQL gehen.

        Gruesse,
         CK

        1. Hallo,

          Bzw. ist 'min()' ohne 'group by' nicht möglich

          Das ist so nicht wahr, zumindest nicht fuer alle DBMS.

          SELECT MIN/MAX/SUM/...(spalte) FROM tabelle

          Sollte sowohl bei MySQL als auch bei PostGreSQL gehen.

          Wo denk ich nur hin, ich Dussel. Natürlich funktionieren Aggregat-Funktionen auch über die gesamte Tabelle. War wohl etwas zu 'problem-orientiert';-)

          Danke für die Richtigstellung.

          Grüße
            Klaus