Announcement

Collapse
No announcement yet.

select doppelte rausfiltern

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

  • select doppelte rausfiltern

    Hi, ich hab folgendes Problem:

    Ich habe folgenden Table:

    Nr. Date1 Date2 Order.....
    1 10.1 12.1 2000
    1 10.1 14.1 1000
    1 10.1 14.1 1200
    1 10.1 16.1 1000
    2 10.1 14.1 2000
    2 10.1 14.1 1200
    2 10.1 16.1 1000
    3 17.1 18.1 500
    3 17.1 20.1 1500
    4 24.1 30.1 1000
    ....
    usw.

    Das Problem ist nun dass am Date1 was doppelt reingelaufen ist und nur druch die Nr. zu unterscheiden ist die aber fortlaufend ist.
    Ich braeuchte also einen Select der von jedem Date die groesste Nr. nimmt Hier also alles mit der Nr. 2, 3 und 4.

    Hoffe meine Erklaerung war gut genug :-)

    Danke schon mal


    Gruss
    Heinz

  • #2
    Hallo Heinz

    SELECT MAX(Nr) AS MaxNR, Date1
    FROM Tabelle
    GROUP BY Date1

    falls Dir Nr und Date1 als Rückgabewert reicht.

    Olaf
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Wenn Du die anderen Felder auch brauchst dann mach es so:

      select * from Table as x
      where x.nr=(select max(nr) from Table
      where date1=x.date1)

      Gruß frauwue
      docendo discimus

      Comment


      • #4
        Danke,
        aber jetzt hab ich noch was vergessen, der ganze Table wie ihr oben seht hat noch Material und Kunden drinnen stehen.
        Ich hab dann mal den Select von frauwue versucht und ihn etwas veraendert.

        select * from Table as x
        where x.nr=(select max(nr) from Table
        where date1=x.date1 and Material='mat1' and Kunde='Kunde1')

        So, es wuerde laufen, doch das hat bei etwa 40000 Tupel etwa ne gute halbe STD gedauert ( kein schlechter PC ) und es sind mehr Ergebnisse gekommen wie bei einem normalen Select...was ja auch nicht sein soll. Habs aber leider noch nicht kontrolliert welche Ergebnisse falsch sind....werd ich mich morgen mal dransetzen.
        Weis jetzt schon wer was da falsch ist ?

        Comment


        • #5
          Hallo Heinz,

          select * from Table as x
          where x.Material='mat1' and x.Kunde='Kunde1'
          and x.nr=(select max(nr) from Table
          where date1=x.date1 and Material='mat1' and Kunde='Kunde1')


          Die Bedingung für Material und Kunde muss auch in den äußeren Select.

          Gruß frauwue
          docendo discimus

          Comment


          • #6
            Super, Danke

            Aber nochwas :-)

            Wenn ich das verallgemeinern will also ohne Direkte Angabe von Material und Kunde würde das dann stimmen ?

            select * from Table as x
            where x.nr=(select max(nr) from Table
            where date1=x.date1 and Kunde=x.Kunde and Material=x.Material)

            Gruss
            Heinz

            Comment


            • #7
              Ja

              Gruß frauwue
              docendo discimus

              Comment


              • #8
                Hi, mir ist zu dem Thema noch was eingefallen.

                Ich moechte nun alle Datensätze rauslöschen die ich bei dem obigem Select nicht anspreche. Wie würde das dann aussehen

                Vielen Dank

                Gruss
                Heinz

                Comment


                • #9
                  Hallo Heinz,

                  ich würde es so machen:

                  Mit dem vorhandenen Select die Daten in eine Temporäre Tabelle oder in eine Datei schreiben.
                  Alle Sätze aus der alten Tabelle löschen, und dann die ausgelesenen Daten
                  wieder einlesen.

                  Gruß frauwue
                  docendo discimus

                  Comment


                  • #10
                    Hmm, sind aber um die 2 000 000 Tupel. Nimmt das nicht viel speicherplatz in Anspruch ?

                    Hab aber jetzt einfach

                    delete from Table as x
                    where not x.nr=(select max(nr) from Table
                    where date1=x.date1 and Kunde=x.Kunde and Material=x.Material)

                    genommen und ich glaube das passt.
                    Zuletzt editiert von Heinz1980; 29.11.2007, 20:43.

                    Comment


                    • #11
                      Hallo Heinz,

                      ich glaube meine Datenbank würde das nicht mitmachen. Ich kann es zu Hause leider nicht testen. Aber neulich habe ich was ähnliches versucht mit Update, das ging nicht. Hat es denn bei Dir funktioniert? Mit welcher Datenbank arbeitest Du?

                      Gruß frauwue
                      docendo discimus

                      Comment


                      • #12
                        Also ich habs bis jetzt mit MSAccess ausprobiert aber nur mit einem kleinem Auszug von etwa 40000 Tupel. Seit dem ich seit neustem Index setze(was ich früher nicht gewusst habe ;-) ) läuft das ziemlich schnell. Also in etwa 15 Sekunden. In der Arbeit hab ich einen MySQL Server mal kucken obs da auch klappt.

                        Comment


                        • #13
                          Hallo,

                          ich erhalte in Informix die Meldung:
                          Tabelle oder View der Unterabfrage kann nicht geändert werden.

                          Gruß frauwue
                          docendo discimus

                          Comment

                          Working...
                          X