Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Datensatz mit gruppierten Max-Wert einer Spalte wählen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von kraeppus, 5 August 2015.

  1. kraeppus

    kraeppus Benutzer

    moin zusammen :)

    ich steh gerade auf dem schlauch...
    ausschnitt aus einer Tabelle:
    snr|znr|txt |gruppe
    4 |1 |35d |1
    4 |1 |35d Blindstrom BEV |0
    4 |2 |35e |1
    4 |2 |35e Blindstrom BEV |0
    4 |3 |21a |1
    4 |3 |21d |2
    4 |3 |21d Wirkstrom BEV 2162 |0
    4 |4 |21b |1
    4 |4 |21e |4
    4 |4 |21e Wirkstrom BEV 2172 |0

    für jede snr-znr-Kombination brauche ich die maximale gruppe sowie den dazu passenden text.
    Ergebnis soll sein:

    4 |1 |35d |1
    4 |2 |35e |1
    4 |3 |21d |2
    4 |4 |21e |4

    ohne die spalte txt funktioniert die abfrage :

    select snr, znr, MAX(gruppe) as maxGruppe
    from Zaehlerstamm
    where snr = '4'
    group by snr, znr
    order by znr.

    die texte sind unterschiedlich, deshalb funzt das net, ist mir zwar klar, aber ich hab grad einfach kein plan, wie ich den text dazu kriege -.-

    kann mir da jemand auf die sprünge helfen?

    lg und schönen tag :)
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Mit einem JOIN.
     
  3. kraeppus

    kraeppus Benutzer

    mit nem join hab ich es bereits versucht; meine Idee war:

    select z1.snr, z1.znr, MAX(z1.gruppe) as maxGruppe, z2.txt
    from Zaehlerstamm z1
    inner join Zaehlerstamm z2 on (z1.snr = z2.snr and z1.znr = z2.znr and z1.gruppe = z2.gruppe)
    where z1.snr = '4'
    group by z1.snr, z1.znr, z2.txt
    order by znr


    hier habe ich mir erhofft, dass durch den select eben die tabelle zustande kommt, wo ich meinte "ohne die spalte txt funktioniert es" zustande kommt und durch den join der text genommen wird. aber fehlgeschlagen :/
     
  4. ukulele

    ukulele Datenbank-Guru

    In etwa so:
    Code:
    SELECT    t1.snr,
            t1.znr,
            t1.maxGruppe,
            t2.txt
    FROM (
    select snr, znr, MAX(gruppe) as maxGruppe
    from Zaehlerstamm
    where snr = '4'
    group by snr, znr
            ) t1
    LEFT JOIN Zaehlerstamm t2
    ON        t1.snr = t2.snr
    AND        t1.znr = t2.znr
    AND        t1.maxGruppe = t2.gruppe
    ORDER BY t1.znr
    Sieht etwas kompliziert aus, ist es aber eigentlich nicht. Auf die originäre Abfrage wird eigentlich nur eine weitere Spalte gejoint.
     
  5. kraeppus

    kraeppus Benutzer

    super dank dir!!

    ich habe einfach keine SQL-denke :/ aber werde mir die abfrage mal zu gemüte führen

    lg und schönen tag wünsch ich
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden