Announcement

Collapse
No announcement yet.

Gruppierungsproblem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Gruppierungsproblem

    Hallo,

    ich habe eigentlich ein relativ einfaches Problem - jedenfalls auf den ersten Blick... irgendwie komme ich jedoch nicht dahinter wie man das in einer Query korrekt lösen kann.

    Folgende Daten sollen als Beispiel gegeben sein:

    FeldA FeldB FeldC
    100 1 1,35
    200 2 1,2
    100 3 1,5

    Bedingungen:

    Es soll prinzipiell nach Feld A gruppiert werden, d.h. es dürfen im Ergebnis nur zwei Zeilen vorkommen.

    Es soll so gruppiert werden, dass von jeder Zeile jene mit dem maximalen Wert für Feld C übrig bleibt, ohne dabei den Inhalt von Feld B zu verlieren.

    D.h. das Ergebnis wäre:

    100 3 1,5
    200 2 1,2

    wobei mir die Reihenfolge der Datensätze prinzipiell egal wäre. Es geht mir wirklich nur darum sicherzustellen, dass ich für jedes Feld A genau die Zeile erhalte, die den höchsten Wert im Feld C hat.

    Bin für jeden Tip dankbar.

  • #2
    Ich glaube, es geht nur über eine Verknüpfung.
    1. Stelle die gruppierten Daten zusammen.
    2. Hole zu dieser Auswahl den fehlenden Wert b.
    [highlight=sql]select t.FeldA, t2.FeldB, t.m
    from ( select FeldA, Max(FeldC) as m
    from Test
    group by FeldA ) t
    join Test t2 on t.FeldA = t2.FeldA and t2.FeldC = t.m[/highlight]
    Ob es noch einen einfacheren Weg gibt, da bin ich mir nicht sicher. Der Logik entspricht es jedenfalls.

    Gruß Jürgen

    Comment


    • #3
      Danke für die Antwort, ist schon mal eine sehr gute Idee. Ich hoffe, dass sich das auch auf meinen konkreten Fall anwenden lässt, denn ich habe leider das Problem, dass Feld B nur symbolisch für eine ganze Reihe von Attributen stand die es zu berücksichtigen gilt - aber theoretisch müsste es durchaus funktionieren, werde ich gleich mal testen.

      Vielen Dank nochmal!

      Comment


      • #4
        Hallo,
        Originally posted by Jürgen Thomas View Post
        ...Ob es noch einen einfacheren Weg gibt, da bin ich mir nicht sicher.
        ob einfacher liegt am Auge des Betrachters , zumindest ohne expliziten Join wäre:

        [highlight=sql]
        select t1.FeldA, t1.FeldB, t1.FeldC
        from beispiel t1
        where t1.FeldC = (
        select max(t2.FeldC)
        from beispiel t2
        where t2.FeldA = t1.FeldA
        )
        [/highlight]

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment

        Working...
        X