erster Datensatz in mehreren Gruppen mit Sortierung

Ianras

Neuer Benutzer
Beiträge
2
Hallo zusammen,

ich habe folgende Daten:


Projektnr - Status - Datum
212 - 1 - 27.06.2016
212 - 1 - 28.06.2016
212 - 2 - 05.09.2016
212 - 1 - 20.09.2016
214 - 1 - 27.06.2016
214 - 1 - 28.06.2016
214 - 1 - 29.06.2016
214 - 2 - 09.08.2016
214 - 3 - 26.08.2016

---------------------------
create table test
(projektnr varchar2(50) NOT NULL, status number(10) NOT NULL, datum date default(sysdate));

insert into test (projektnr, status, datum) VALUES (212, 1, to_date('27.06.2016', 'dd.MM.YYYY'))
insert into test (projektnr, status, datum) VALUES (212, 1, to_date('28.06.2016', 'dd.MM.YYYY'))
insert into test (projektnr, status, datum) VALUES (212, 2, to_date('05.09.2016', 'dd.MM.YYYY'))
insert into test (projektnr, status, datum) VALUES (212, 1, to_date('20.09.2016', 'dd.MM.YYYY'))
insert into test (projektnr, status, datum) VALUES (212, 1, to_date('27.06.2016', 'dd.MM.YYYY'))
insert into test (projektnr, status, datum) VALUES (214, 1, to_date('28.06.2016', 'dd.MM.YYYY'))
insert into test (projektnr, status, datum) VALUES (214, 1, to_date('29.06.2016', 'dd.MM.YYYY'))
insert into test (projektnr, status, datum) VALUES (214, 2, to_date('09.08.2016', 'dd.MM.YYYY'))
insert into test (projektnr, status, datum) VALUES (214, 3, to_date('26.08.2016', 'dd.MM.YYYY'))
---------------------------

und möchte nun den ersten Datensatz in der Gruppe (Projektnr und Status sortiert nach Datum) feststellen.

Ergebnis dafür sollte so aussehen:

Projektnr - Status - Datum
212 - 1 - 27.06.2016
212 - 2 - 05.09.2016
212 - 1 - 20.09.2016
214 - 1 - 27.06.2016
214 - 2 - 09.08.2016
214 - 3 - 26.08.2016


Leider bekomme ich mit meinem Code:
SELECT projektnr,
status,
datum,
ROW_NUMBER ()
OVER (PARTITION BY projektnr, status ORDER BY projektnr, datum)
rnum
FROM (SELECT *
FROM ( SELECT ROW_NUMBER ()
OVER (PARTITION BY projektnr, status
ORDER BY projektnr, datum, status)
nr,
projektnr,
status,
datum
FROM test
ORDER BY projektnr, status, datum)
WHERE nr = 1)


dieses Ergebnis:
Projektnr - Status - Datum
212 - 1 - 27.06.2016
212 - 2 - 05.09.2016
214 - 1 - 27.06.2016
214 - 2 - 09.08.2016
214 - 3 - 26.08.2016


Also 5 Datensätze anstatt 6 und es fehlt mir noch die Zeile mit dem Datum 20.09.2016.

Für jeden Vorschlag und Lösung wäre ich sehr dankbar.
Grüße
Ianras
 
Werbung:
Versteh ich nicht, warum willst du den 20.9 ? Der ist nicht der 1. Datensatz in der Gruppe 212 , 1.

Code:
SELECT    *
FROM
(
SELECT    projektnr,
        status,
        datum,
        ROW_NUMBER() OVER (PARTITION BY projektnr,status ORDER BY datum ASC) rn
FROM    test
)
WHERE rn = 1

bringt laut deiner Beschreibung richtig:

Code:
212    1    27/06/2016    1
212    2    05/09/2016    1
214    1    28/06/2016    1
214    2    09/08/2016    1
214    3    26/08/2016    1
 
Werbung:
wichtig ist, dass die Reihenfolge genau so wie vorgegeben ist, betrachtet werden muss, um den Verlauf zu zählen. Beim Projekt 212 wäre der Status: 1-2-1. Also 3 Statuswechsel.
Laut meinem 2 Statuswechsel: 1-2
 
Zurück
Oben