Announcement

Collapse
No announcement yet.

ORDER BY & GROUP BY Problem

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

  • ORDER BY & GROUP BY Problem

    Moin zusammen,

    ich habe eine Tabelle :

    teile_nr aenderungs_version bezeichnung blatt von_blaettern
    209120 2 Pneumatikplan 1 7
    209120 1 Pneumatikplan 1 7
    209120 0 Pneumatikplan 1 7
    209120 2 Pneumatikplan 2 7
    209120 1 Pneumatikplan 2 7
    209120 0 Pneumatikplan 2 7
    209120 2 Pneumatikplan 3 7
    209120 1 Pneumatikplan 3 7
    209120 0 Pneumatikplan 3 7
    209120 2 Pneumatikplan 4 7
    209120 1 Pneumatikplan 4 7
    209120 0 Pneumatikplan 4 7
    209120 2 Pneumatikplan 5 7
    209120 1 Pneumatikplan 5 7
    209120 0 Pneumatikplan 5 7
    209120 2 Pneumatikplan 6 7
    209120 1 Pneumatikplan 6 7
    209120 0 Pneumatikplan 6 7
    209120 3 Pneumatikplan 7 7
    209120 2 Pneumatikplan 7 7

    Ich möchte per Abfrage zu einer bestimmten Teilenummer, hier im Beispiel die "209120", alle Blätter mit der neuesten, also höchsten Änderungsversion anzeigen lassen. Alle anderen Einträge soll der benutzer nicht sehen. Heißt, er soll für jedes Blatt nur einen einzigen Eintrag sehen können. Und zudem ausschließlich nur die aktuellste Version. Ergebnis müsste also sein:

    teile_nr aenderungs_version bezeichnung blatt von_blaettern
    209120 2 Pneumatikplan 1 7
    209120 2 Pneumatikplan 2 7
    209120 2 Pneumatikplan 3 7
    209120 2 Pneumatikplan 4 7
    209120 2 Pneumatikplan 5 7
    209120 2 Pneumatikplan 6 7
    209120 3 Pneumatikplan 7 7


    Ich habe schon stundelang herumprobiert und komme einfach nicht weiter. Vielleicht kann mir jemand von Euch helfen, das Problem zu lösen..

    Bisher habe ich folgende Abfrage erstellt:

    SELECT teile_nr, `aenderungs_version`,`bezeichnung`,`blatt`,`von_bl aettern` FROM `zeichnungen` WHERE teile_nr like "209120"
    order by blatt asc, aenderungs_version desc

    teile_nr aenderungs_version bezeichnung blatt von_blaettern
    209120 2 Pneumatikplan 1 7
    209120 1 Pneumatikplan 1 7
    209120 0 Pneumatikplan 1 7
    209120 2 Pneumatikplan 2 7
    209120 1 Pneumatikplan 2 7
    209120 0 Pneumatikplan 2 7
    209120 2 Pneumatikplan 3 7
    209120 1 Pneumatikplan 3 7
    209120 0 Pneumatikplan 3 7
    209120 2 Pneumatikplan 4 7
    209120 1 Pneumatikplan 4 7
    209120 0 Pneumatikplan 4 7
    209120 2 Pneumatikplan 5 7
    209120 1 Pneumatikplan 5 7
    209120 0 Pneumatikplan 5 7
    209120 2 Pneumatikplan 6 7
    209120 1 Pneumatikplan 6 7
    209120 0 Pneumatikplan 6 7
    209120 3 Pneumatikplan 7 7
    209120 2 Pneumatikplan 7 7

    Jetzt habe ich sortiert nach Blatt und Änderungsversion. Wenn ich jetzt noch ein "Group by blatt" anhängen könnte, würde ich genau mein gewünschtes Ergebnis haben. Es würde jeweils nur der höchste Versionstand stehen bleiben und alle anderen verschwinden. Leider kann man aber kein "Group by" NACH einem Order by platzieren.

    Nun bin ich überfragt ...
    Hat jemand einen Tip für mich?

    Gruß
    Zuletzt editiert von bjothom; 29.12.2010, 14:35.

  • #2
    Group by gehört auch vor das Order by. Einfach umdrehen

    Comment


    • #3
      Hallo,
      im select den maxwert der aenderungs_version waehlen.

      SELECT teile_nr, max(`aenderungs_version`),`bezeichnung`,`blatt`,`v on_bl aettern` FROM `zeichnungen` WHERE teile_nr like "209120"

      mfg BD

      Comment


      • #4
        Hi zusammen,


        @Markus: genau das funktioniert nicht. Dann sind die Daten nicht richtig sortiert und ich bekomme nicht die letzte Änderungsversion angezeigt (Siehe mein gewünschtes Ergebnis oben).

        @bdittmar:
        Das funktioniert leider auch nicht, weil er dann nur einen Datensatz ausgibt. Und zwar den einen Datensatz mit Revision 3. Mein Ergebnis (siehe oben) soll aber anders aussehen. Ich will jedes Blatt von 1 bis 7 angezeigt bekommen. Und von jedem Blatt nur die höchste Änderungsversion. Deine Abfrage zeigt mir nur den einen Datensatz mit der höchsten Änderungsversion, die er finden kann. Hier das Ergebnis:

        teile_nr max(`aenderungs_version`) bezeichnung blatt von_blaettern
        209120 3 Pneumatikplan 5 7

        Gruß

        Comment


        • #5
          Dann nimm die beiden letzten Felder noch in die Gruppierung auf

          Comment


          • #6
            Gleis mich auf, wie meinst du das? Was ändert sich?

            Comment


            • #7
              Originally posted by bjothom View Post
              Gleis mich auf, wie meinst du das? Was ändert sich?
              [HIGHLIGHT="SQL"]SELECT teile_nr, max(`aenderungs_version`),`bezeichnung`,`blatt`,`v on_bl aettern`
              FROM `zeichnungen`
              WHERE teile_nr = "209120"
              GROUP BY teile_nr, `bezeichnung`,`blatt`,`v on_bl aettern`
              ORDER BY blatt asc, aenderungs_version desc

              [/HIGHLIGHT]

              Comment


              • #8
                [highlight=sql]
                select
                teile_nr
                max(aenderungs_version) as version,
                bezeichnung,
                blatt von_blaettern
                from
                <Tabelle>
                group by
                teile_nr ,bezeichnung, blatt, von_blaettern
                order by
                teile_nr, blatt, von_blaettern;
                [/highlight]

                Comment


                • #9
                  Super, Dank an Euch beide!

                  Da die Bezeichnung nicht eindeutig ist, habe ich sie aus der Gruppierung genommen. Nun sieht es gut aus! Bin nicht auf die Idee gekommen, dass man auch Gruppierungen "schachteln" kann. Manche Dinge liegen einfach zwischen den Ohren.

                  Besten Dank

                  Comment


                  • #10
                    Es handelt sich ja um keine Schachtelung. Eine Gruppierung fast alle Datensätze zusammen, die in den angegebenen Feldern identische Werte besitzen

                    Comment


                    • #11
                      Hallo,

                      siehe auch: Formatierung von SQL in Beiträgen
                      und zum Thema: Bei "doppelten" Datensätzen nur einen anzeigen

                      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