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

Group by von mehreren Werten

Dieses Thema im Forum "Oracle" wurde erstellt von Cr4m0, 3 August 2016.

  1. Cr4m0

    Cr4m0 Benutzer

    Moin,

    ich habe folgende Daten eines Kunden:

    Kundennummer - Produkt - Kaufdatum
    123 - A - 08.08.2000 13:27:33
    123 - B - 19.04.2000 17:50:15
    123 - A - 20.06.2001 15:18:06
    123 - B - 14.02.2003 18:37:06
    123 - B - 20.06.2001 15:18:06

    Ich möchte nun die Kundennummer UND das Produkt des max(Kaufdatum)
    Also folgendes Ergebnis:

    123 - B - 14.02.2003 18:37:06

    select s.kundennummer,
    s.produkt,
    max(s.kaufdatum) as max_kaufdatum
    from tabelle s
    where s.kundennummer = 123
    group by s.kundennummer, s.produkt;

    Leider bekomme ich hier immer folgendes Ergebnis:
    123 - A - 20.06.2001 15:18:06
    123 - B - 14.02.2003 18:37:06
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Schnellschuß:

    Code:
    test=*# select * from cr4m0 ;
     knr | prod |  k_datum   
    -----+------+------------
     123 | a  | 2000-08-08
     123 | b  | 2000-04-19
     123 | a  | 2001-06-20
     123 | b  | 2003-02-14
     123 | b  | 2001-06-20
    (5 Zeilen)
    
    test=*# select knr, prod, max(k_datum) from cr4m0 group by knr, prod order by max(k_datum) desc limit 1;;
     knr | prod |  max   
    -----+------+------------
     123 | b  | 2003-02-14
    (1 Zeile)
    
     
  3. Cr4m0

    Cr4m0 Benutzer

    Hm.. irgendwie funktioniert die Abfrage bei mir nicht. Ich bekomme immer den Fehler "SQL command not properly ended".
     
  4. akretschmer

    akretschmer Datenbank-Guru

    ähm, ich habe hier PostgreSQL, aber das ist ganz triviales SQL. Es reicht natürlich ein ; amd Ende aus, aber das sollte nicht das Problem sein.
     
  5. Cr4m0

    Cr4m0 Benutzer

    Hab die Lösung:

    select x.Kundennummer,
    x.Produkt,
    x.Kaufdatum
    from tabelle x
    where x.Kundennummer in (123)
    and x.Kafdatum = ( select max(sub.purchasedate) from tabelle sub where sub.customerid = x.customerid) ;

    Vielen Dank für die Mühe.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Hrm. Vielleicht solltest Du die Where-Condition in den Subselect nehmen. Es kann ka sein, daß Kude 123 an dem Tag nix gekauft hat. Oder halt meine Lösung, die vermutlich schneller ist (und diese um die Condition noch erweitern)
     
  7. drdimitri

    drdimitri Datenbank-Guru

    Die LIMIT Klausel gibt es erst seit Oracle 12. Vorher musste man das mittels Rownum machen:
    SELECT * FROM(SELECT ... GROUP BY... ORDER BY ...) WHERE rownum=1;
     
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