Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

immer ersten Datensatz selektieren

Dieses Thema im Forum "Oracle" wurde erstellt von claudifranko, 25 März 2013.

  1. claudifranko

    claudifranko Neuer Benutzer

    Hallo,

    ich habe folgende Daten.

    Ich möchte aus diesen Daten immer den ersten Satz pro Artikel selektieren. (So dass in meinem Fall nur noch 2 Sätze stehenbleiben. Beim Groupieren muss ,am auf jedem Fall immer irgendwelche Summen bilden oder den höchsten bzw. niedrigsten Wert angeben. Das will ich aber nicht.

    Kann mir jemand helfen?

    Artikle Auftrag Menge Anlagetermin Wunschtermin Versandtermin
    0815 AB1234 100 01.03.2013 24.08.2013 24.08.2013
    0815 AB1234 100 01.03.2013 01.05.2013 01.05.2013
    0814 AB1245 200 01.04.2013 01.06.2013 01.06.2013
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Beim gruppieren mußt Du eine Aggregatfunktion anwenden. Das kann SUM() sein, aber auch MIN() oder MAX(). Du sagst nun den ersten Datensatz. Das bezieht sich vermutlich auf ein Datum. Davon hast Du 3. Also, Du suchst ein "select artikle, min(...) from bla group by artikle", für ... setzt Du eines Deiner Datumfelder ein. So einfach.

    Andreas
     
  3. claudifranko

    claudifranko Neuer Benutzer

    Mensch, das ging ja schnell.

    Aber ganz so einfach ist es eben nicht. Ich sortiere die Daten bereits vor nach Anlagedatum. So dass immer der Datensatz mit dem niedrigsten Anlagedatum oben steht.
    Es kann aber auch sein, dass es immer das gleiche Anlagedatum ist. Und dann komme ich natürlich mit min(..) nicht wirklich weiter. Jetzt hab ich gedacht, ok, nehm ich ein weiteres Datumsfeld dazu, aber hier fall ich dann genauso auf die Nase, da diese hier ebenfalls gleich sein können.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Dann ist Deine Datenbank kapott ;-)

    Code:
    test=*# select * from claudio ;
     artikel | anlagetermin
    ---------+--------------
         815 | 2013-03-01
         815 | 2013-03-01
         814 | 2014-04-01
    (3 rows)
    
    test=*# select artikel, min(anlagetermin) from claudio group by artikel;
     artikel |    min
    ---------+------------
         814 | 2014-04-01
         815 | 2013-03-01
    (2 rows)
    
    Andreas
     
  5. claudifranko

    claudifranko Neuer Benutzer

    Um die restlichen Informationen dazu zu bekommen muss ich diese ebenfalls mit in den Group by aufnehme und dann sind es wieder alle 3 Zeilen oder gibt es eine Möglichkeit diese außen vor zu lassen? Wahrscheinlich muss ich diese dann umständlich dazu lesen, oder.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Ja. In ORA kannst ja auch row_number() over (partition by ... order by ...) verwenden und dann die mit row_number=1 verwenden und den Rest entsorgen. Schaffst Du! ;-)
     
  7. claudifranko

    claudifranko Neuer Benutzer

    Passt perfekt. Genau das was ich gesucht habe. Funktioniert. Vielen herzlichen Dank! :O)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden