Group by von mehreren Werten

Cr4m0

Benutzer
Beiträge
22
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
 
Werbung:
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)
 
ä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.
 
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.
 
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)
 
Werbung:
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;
 
Zurück
Oben