Announcement

Collapse
No announcement yet.

Abfrageergebnis nach einer Spalte gruppieren und nach anderer Spalte sortieren

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

  • Abfrageergebnis nach einer Spalte gruppieren und nach anderer Spalte sortieren

    Hallo zusammen,

    tolles Forum, super was hier passiert.

    Kniffeliges SQL-Problem:
    Das Ergebnis einer SQL-Abfrage soll nach der Spalte (UID) gruppiert sein und jede "Gruppe" nach (eventDate) absteigend sortiert sein.


    Beispiel:

    table
    UID | eventDate
    ---------------------------
    1 | 07.09.2007 13:33:00
    3 | 07.09.2007 13:30:00
    2 | 07.09.2007 13:20:00
    1 | 07.09.2007 13:14:00
    3 | 07.09.2007 13:18:00
    2 | 07.09.2007 13:10:00
    ...


    soll abgefragt so sortiert zurück gegeben werden:

    table
    UID | eventDate
    ---------------------------
    1 | 07.09.2007 13:33:00
    1 | 07.09.2007 13:14:00
    3 | 07.09.2007 13:30:00
    3 | 07.09.2007 13:18:00
    2 | 07.09.2007 13:20:00
    2 | 07.09.2007 13:10:00
    ...

    d.h.:
    zu gruppieren ist nach UID;
    Sortierkriterium für jede "Gruppe" ist eventDate DESC.

    Wie ist das mit ORACLE zu realisieren. Wichtig: Eine Abfrage soll das Ergebnis in dieser Ordnung liefern. Alle Daten in einer Tabelle.

    Hat wer eine Idee?
    Vielen Dank!

  • #2
    Dein Ergebnis ist nicht groupiert sonder nur Sortiert (oder by UID,eventDate) .
    Wäre es Grupiert hättest du nur jede UID einmal und du könntest auch nur ein Datum je Gruppe bekommen.

    Comment


    • #3
      Vielen Dank. Richtig, bei Gruppierung gäbe es für jede Gruppe nur eine UID. Also die UIDs nicht gruppiert sondern zu "Gruppen" / "Blöcken" zusammengefasst
      Wie geht man da ran?

      Comment


      • #4
        [highlight=sql]
        ... order by UID ASC, eventDate DESC ...
        [/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


        • #5
          vielen Dank!

          funktioniert leider nicht, da alle "Gruppen" nach eventDate DESC sortiert sein sollen...

          Ausgabe mit den Kriterien "... ORDER BY UID ASC, eventDate DESC ..."
          UIDMSG | eventDate
          --------------------------
          1 | 9.6.2007 4:14:50
          2 | 9.6.2007 2:00:04
          2 | 9.6.2007 1:59:55
          3 | 9.6.2007 10:54:51
          3 | 9.6.2007 10:53:26
          5 | 9.6.2007 9:05:37
          ...

          sollte aber so aussehen:
          UIDMSG | eventDate
          --------------------------
          3 | 9.6.2007 10:54:51
          3 | 9.6.2007 10:53:26
          5 | 9.6.2007 9:05:37
          1 | 9.6.2007 4:14:50
          2 | 9.6.2007 2:00:04
          2 | 9.6.2007 1:59:55
          ...

          Wie ist das zu realisieren? Programmatisches Sortieren in der externen Applikation ist zu vermeiden. Gibts mit SQL dafür eine Möglichkeit?

          Vielen Dank!

          Comment


          • #6
            es geht als darum, nach UIDs zu clustern und die Elemente jedes Clusters absteigend nach eventDate zu sortieren. Die Ordnung der Cluster ist durch eventDate bestimmt.

            Comment


            • #7
              with tmp as (select uid,max(eventdate) maxed from TABLE group by uid)
              select uid,eventdate,
              (select maxed from tmp t where t.uid = a.uid )
              from TABLE
              order by 2 desc ,2 , 1

              Comment


              • #8
                super danke! hat funktioniert.

                Comment

                Working...
                X