Announcement

Collapse
No announcement yet.

SQL-Abfrage mit Group By oder Unterabfrage

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

  • SQL-Abfrage mit Group By oder Unterabfrage

    Ich will aus einer View nach bestimmten Personen (z.B. Namen) suchen. In der View können zu einer Person mehrere Datensätze sein. Über ein Datumsfeld (ZeitraumVom) will ich zu jeder Person nur den zeitlich letzen ( MAX(LEISTVON) ) Datensatz haben. Wie könnte die Select-Abfrage aussehen?

    MfG

    Dirk Reichert

  • #2
    Hallo Dirk,

    am einfachsten mit einem Subselect: <pre>
    select ... from tabelle outer
    where ... and outer.Datumsfeld = (
    select max(inner.Datumsfeld)
    from tabelle inner
    where inner.person = outer.person)</pre>

    Gruß Fal
    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


    • #3
      Danke,

      funktioniert prima

      Dirk Reicher

      Comment


      • #4
        Jetzt will ich die Anzahl der Datensätze anzeigen, welche die obige Abfrage zurückliefert. Mache ich RecordCount oder ersetze die erste Zeile der Abfrage mit Select Count(*), dauert die Ausführung bei vielen Datensätzen ( ca. 1000 Datensätze) viel zu lange. Wer kann helfen?

        MfG

        Dirk Reicher

        Comment


        • #5
          Hallo Dirk,

          bevor man anfängt SQL-Code zu optimieren, sollte man sich immer überlegen, was das Ziel der Abfrage ist. Für deinen ersten Fall wolltest du die jeweils letzten Datensätze aus einer Menge. Dafür ist das Subselect völlig OK. Deine zweite Abfrage soll nun diese jeweils letzten Datensätze zählen und das dauert Dir zu lange. Ja klar, der Server macht hier ja auch doppelte Arbeit. Für dein Ergebnis ist es doch völlig egal, ob du den letzten, ersten oder irgendeinen Datensatz zählst. (Wenn es einen letzten Datensatz gibt, dann gibt es auch einen ersten und demzufolge auch irgendeinen Also solltest Du mal probieren, ob du mit einem einfachen "select count(distinct person) from ..." besser wegkommst, da du dem Server damit das Subselect (welches ja auch wieder eine Aggregatfunktion enthält) ersparst.

          Gruß Fal
          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