Announcement

Collapse
No announcement yet.

Abfrage doppelte Werte in ersten 12 Stellen

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

  • Abfrage doppelte Werte in ersten 12 Stellen

    Hallo,

    ich habe in einer Datenbank (postgres) eine Menge von 260000 Datensätzen, jetzt muss ich ermitteln, welche dieser 260000 Datensätze in einem Feld, welches 14 Stellen lang ist, auf den ersten 12-Stellen nicht eindeutig sind. Kann mir jemand helfen?

    Gruß und Dank
    Pfeiffy

  • #2
    [highlight=sql]select substr(meinfeld,1,12) from tabelle
    group by substr(meinfeld,1,12)
    having count(*)> 1;
    [/highlight]
    Gruß, defo

    Comment


    • #3
      Hallo,

      vielen Dank - das funktioniert einwandfrei, nun möchte ich jedoch noch neben dem Feld meinfeld, welches als Auswahl steht auch noch weitere Felder, welche zum Satz gehören zusätzlich angezeigt bekommen. --> so klappt es nicht:
      SELECT zusAnzeigefeld, substr("meinfeld",1,12) FROM public.tabelle -- where zusAnzeigefeld> '1970-12-14'
      GROUP BY zusAnzeigefeld, substr("meinfeld",1,12)
      HAVING COUNT(*)> 1;

      Gruß
      Pfeiffy

      Comment


      • #4
        [Highlight=SQL]SELECT zusAnzeigefeld, meinfeld
        FROM tabelle
        WHERE substr(meinfeld,1,12) in (select substr(meinfeld,1,12)
        from tabelle
        group by substr(meinfeld,1,12)
        having count(*)> 1)[/Highlight]

        Comment


        • #5
          Hallo,
          das scheint nicht ganz zu funktionieren, ich sollte hier die gleiche Menge wie bei der oberen Abfrage herausbekommen, ich bekomme als Menge jedoch mehr als doppelt so viele und diese sind auch nicht die mehrmals vorkommenden.

          Gruß
          Pfeiffy

          Comment


          • #6
            Originally posted by Pfeiffy View Post
            Hallo,
            mehr als doppelt so viele und diese sind auch nicht die mehrmals vorkommenden.
            DAs ist ja wohl auch zu erwarten, sonst wäre Dein Job nicht, die doppelten zu entfernen.

            Originally posted by Pfeiffy View Post
            Hallo,
            diese sind auch nicht die mehrmals vorkommenden.
            Wie prüfst Du das?
            Gruß, defo

            Comment


            • #7
              Hallo,
              ich weiss, dass es nicht die doppelten sind, da ich hier ein paar durchgetestet habe. Deine Abfrage:
              Code:
              SELECT substr(meinfeld,1,12) FROM tabelle
               GROUP BY substr(meinfeld,1,12) 
              HAVING COUNT(*)> 1;
              bringt mir genau die richtigen Ergebnisse, nur möchte ich noch ein zweites Feld des Satzes dazu anzeigen.

              Gruß
              Pfeiffy

              Comment


              • #8
                Originally posted by Pfeiffy View Post
                Hallo,
                ich weiss, dass es nicht die doppelten sind, da ich hier ein paar durchgetestet habe.
                Also einer von uns macht hier einen Denkfehler.
                Die Abfrage von Ralf kann nur Sätze aus der Menge der Dubletten zurückliefern.

                'ich weiss' klingt im übrigen nicht gut, mit 'wie hast Du das geprüft?' wollte ich ein SQL Statement von Dir bekommen, dass Deine Behauptung bestätigt.
                Ich kenne natürlich Deine Dateninhalte nicht, aber bedenke bitte folgendes:
                Der Feldinhalt, den Du zusätzlich abfragst, muss sich nicht ausschließlich in der Menge der doppelten substr12 Daten finden, sondern kann für sich genommen auch bei anderen Sätzen vorliegen. Ein paar handgesichtete Stichproben, die das zeigen, bedeuten bei 260T Sätzen nicht, dass die Abfrage falsch ist.
                Gruß, defo

                Comment


                • #9
                  Hallo,
                  ok, ich habe eine select-Abfrage mit einem like auf einige der Werte gemacht (auf 12 Stellen) und habe hierbei jeweils 2 oder mehr Sätze herausbekommen. Aber - du hast natürlich recht! da hatte ich einen Denkfehler, der zusätzliche Wert muss ja nicht bei beiden Sätzen gleich sein - stimmt!!
                  Hmmm - würde es gehen alle gleichen Sätze anzuzeigen (dann hätte ich natürlich mehr Ergebnisse), könnte aber das Feld, das ich zusätzlich in die Auswahl mit hineinnehme kontrollieren.
                  Ich hatte die Abfrage so umgestellt:
                  Code:
                  SELECT substr(meinfeld,1,12) FROM tabelle where anderesFeld > '2012-12-12'
                   GROUP BY substr(meinfeld,1,12) 
                  HAVING COUNT(*)> 1;
                  --> hier kann ich dann aber nicht sehen, was in anderesFeld drin steht, daher bräuchte ich diese zusätzliche Anzeige.

                  Gruß
                  Pfeiffy

                  Comment


                  • #10
                    Ich glaub, ich hab nicht ganz verstanden, was die neue Abfrage soll, aber wenn Du die zusätzliche Where Bedingung in die Abfrage von Ralf einbaust, bist Du vielleicht näher an Deiner Wunschvorstellung.
                    Gruß, defo

                    Comment


                    • #11
                      Hallo,
                      die zusätzliche Abfrage soll die eigentliche Ergebnismenge noch einengen, also alle, die mehrmals kommen und dann zusätzlich noch ein bestimmtes Alter haben zur Kontrolle möchte ich dieses Feld dann aber auch angezeigt bekommen (das Feld Alter).

                      Gruß
                      Pfeiffy

                      Comment


                      • #12
                        Gut, wenn Mehrfachauftreten UND ein bestimmtes Alter gemeinsames Kriterium sind, muss das Alterskriterium halt auch in das Having select.
                        Nochmal: nimm das Statement von Ralf und ergänze es.
                        Gruß, defo

                        Comment

                        Working...
                        X