Hallo,
ich habe ein Problem mit einer gruppierten Abfrage mit Bedingung. Folgende Beispieltabelle:
CREATE TABLE test( id int IDENTITY(1,1) NOT NULL, gruppe nchar(10) NULL, zustand smallint NULL, wert nchar(10) NULL) INSERT INTO test VALUES ('A', 1, 'aa'), ('A', 1, 'ab'), ('A', 2, 'ba'), ('A', 3, 'ca'), ('A', 3, 'cb'), ('B', 1, 'aaa'), ('B', 3, 'bbb'), ('B', 3, 'ccc'), ('B', 3, 'ddd'), ('B', 3, 'eee'), ('B', 3, 'fff'), ('C', 1, '111'), ('C', 1, '222'), ('C', 1, '333'), ('C', 2, '444')
Nun möchte ich für jede Gruppe (A, B, ...) den Wert selektieren, für den der Zustand zum ersten mal (sortiert nach das ID) 3 erreicht.
WITH test_CTE AS ( SELECT id, gruppe, zustand, wert, FIRST_VALUE(wert) OVER (Partition by gruppe order by id) AS newWert FROM test WHERE zustand = 3) SELECT MIN(id), newWert FROM aaa_CTE GROUP BY newWert ORDER BY MIN(id)
Das funktioniert schonmal, allerdings möchte ich nun für Gruppen, für die der Zustand 3 nicht erreicht wird, den Wert selektieren, für den erstmalig der Zustand 2 erreicht wird, bzw. eben Zustand 1, wenn auch Zustand 2 nicht exisitert.
Hat hier jemand eine Idee?
Vielen Dank!