Announcement

Collapse
No announcement yet.

Nur den ersten von fast gleichen Datensätzen selektieren

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

  • Nur den ersten von fast gleichen Datensätzen selektieren

    Hallo,

    in meiner Tabelle sind Datensätze in der Form:
    ID; Spalte1; Spalte2;
    1; Hans; Mustermann;
    2; Irene; Beinlich;
    3; Hans; Mustermann;
    4; Hans; Mustermann;
    5; Lothar; Wegwerf;
    6; Irene; Beinlich;

    Ich möchte ein Resultat, in dem jede Person nur 1x gelistet wird mit ihrem ersten Vorkommen.
    also
    1; ...
    2; ...
    5; ...

    Ein "select distinct" geht ja nicht, weil sich die ID unterscheidet.
    Hat jemand einen tipp, wie sowas performant geht?
    Schöne Grüße
    Torsten

  • #2
    Man könnte versuchen die Datensätze zu gruppieren ( GROUP BY)

    Comment


    • #3
      Hallo,
      Distinct geht schon, wenn man nur nach Nachname und Vorname sucht.
      Dasselbe gilt auch für Group by. Ist also egal wie Du's machst. Du darfst nut nicht nach der ID suchen.

      Gruß frauwue
      docendo discimus

      Comment


      • #4
        @Markus: Das probiere ich gerade, aber es gibt zwei Probleme, d.h ich habe noch folgende (nicht erwähnte) Nebenbedingungen: Ich habe ein Order By drin und ein Limit.

        Also mit den echten Feldern sähe die Abfrage jetzt so aus:

        SELECT id, title, date from events group by title order by date limit 20

        Sie bringt mir aber nicht den ersten Datensatz mit dem wert von date zurück, der nach order by passen würde und sie bringt mir nicht die gewünschten 20 Zeilen zurück.
        Zuletzt editiert von westor; 21.09.2007, 10:46.

        Comment


        • #5
          @frauwue: aber ich brauche ja die id in der ergebnisliste. :-/

          Comment


          • #6
            Hallo,

            da ich nicht mit MYSQL arbeite kann ich Dir nur sagen wie ich das in Informix machen würde:

            Select x.id, x.title, x.date from events x
            where datum=(select min(Date) from events where id=x.id)
            order by x.date

            vielleicht hilft Dir das auch weiter
            docendo discimus

            Comment


            • #7
              Entschuldigung es muß so heißen:

              Select x.id, x.title, x.date from events x
              where datum=(select min(Date) from events where title=x.title)
              docendo discimus

              Comment


              • #8
                @frauwue:das sieht gut aus und könnte helfen, werde ich nachher gleich probieren. Danke für den Tipp.

                Comment


                • #9
                  natürlich noch mit
                  order by x.date
                  docendo discimus

                  Comment


                  • #10
                    Hallo frauwue,

                    ich habe mich zu früh gefreut.
                    Die Lösung geht dann, wenn ich alle Datensätze betrachte. Wenn ich aber das Datum ab einem bestimmten Datum nur betrachten will, werden leider die vorhergehenden Daten ja ausgefiltert.
                    Hm ich weiß nicht, ob ich mich klar ausgedrückt habe. Also die komplette Abfrage sieht in etwa so aus:

                    Select x.id, x.title, x.date from events x
                    where x.date=(select min(date) from events where title=x.title) and x.date > '2008-09-25' order by x.date

                    Dann werden die Datensätze nicht mit selektiert, die ihr minimum in der Vergangenheit haben. Ich will aber immer den Datensatz, der nach der Kriterienauswahl der mit dem niedrigsten Datum ist.

                    Comment


                    • #11
                      Hallo Torsten,
                      das müsste dann so heißen:

                      Select x.id, x.title, x.date from events x
                      where x.date=(select min(date) from events where title=x.title and
                      date > '2008-09-25' ) order by x.date

                      Gruß frauwue
                      docendo discimus

                      Comment


                      • #12
                        Ja, prima, das geht. Da hätte ich aber auch selbst drauf kommen können ;-) Jedenfalls vielen herzlichen Dank!

                        Comment

                        Working...
                        X