je 2 Ergebnisse/Kategorie anzeigen

hellochello

Neuer Benutzer
Beiträge
1
Ich habe eine Datenbank mit Kategorien (1-10, nicht sortiert), und dazu jeweils ein Datum hinterlegt.
Es kann pro Kategorie mehrere Datum-Einträge geben, also zB:

Kat-Datum
1-1.1.2015
2-2.2.2015
1-1.10.2014
3-2.1.2013
1-3.4.2015




Ich möchte jetzt eine Abfrage erstellen, die mir pro Kategorie die ersten beiden Datensätze (Datum) anzeigt.

Bitte um Hilfe.
 
Werbung:
Ich habe eine Datenbank mit Kategorien (1-10, nicht sortiert), und dazu jeweils ein Datum hinterlegt.
Es kann pro Kategorie mehrere Datum-Einträge geben, also zB:

Kat-Datum
1-1.1.2015
2-2.2.2015
1-1.10.2014
3-2.1.2013
1-3.4.2015




Ich möchte jetzt eine Abfrage erstellen, die mir pro Kategorie die ersten beiden Datensätze (Datum) anzeigt.

Bitte um Hilfe.

Das ist eigentlich ganz einfach:

Du hast:

Code:
test=*# select * from hellochello ;
 kat |  datum
-----+------------
  1 | 2015-01-01
  2 | 2015-02-02
  1 | 2014-10-01
  3 | 2013-02-02
  1 | 2015-04-03
(5 rows)

Mittels row_number() zähle ich nun je kat die Records, sortiert nach dem Datum:

Code:
test=*# select *, row_number() over (partition by kat order by datum) from hellochello ;
 kat |  datum  | row_number
-----+------------+------------
  1 | 2014-10-01 |  1
  1 | 2015-01-01 |  2
  1 | 2015-04-03 |  3
  2 | 2015-02-02 |  1
  3 | 2013-02-02 |  1
(5 rows)

Da Du nur die ersten 2 sehen willst:

Code:
test=*# select kat, datum from (select *, row_number() over (partition by kat order by datum) from hellochello ) foo where row_number <= 2;
 kat |  datum
-----+------------
  1 | 2014-10-01
  1 | 2015-01-01
  2 | 2015-02-02
  3 | 2013-02-02
(4 rows)

Simpel, oder?


Leider kann MySQL aber kein row_number. Google mal nach Würharounds dazu, oder verwende gleich eine funktionierende DB, die solch trivialen Dinge, die seit zig Jahren Standard sind, kann. PostgreSQL zum Beispiel.
 
Zurück
Oben