Я хотел бы определить порядок событий в таблице данных SQL. Мои данные устроены так, что каждая комбинация идентификатор-дата-событие появляется в отдельной строке. Вывод должен быть одной строкой для каждого идентификатора, указывая порядок, в котором произошло 3 (и только 3) события, и флаг, указывающий, какое из трех событий когда-либо происходило. Чтобы указать порядок, мне нужно знать только тип первого события и тип последнего события. (Так, например, ABC = ADAC, потому что я заинтересован только в том, что А было самое первое и C была самая последняя вещь.)Определить порядок событий в SQL (для каждой группы)
Пусть мои данные:
CREATE TABLE #ABC
(ID INT NOT NULL,
CODE_DATE DATE NOT NULL,
CODE_GROUP VARCHAR(10) NULL)
INSERT INTO #ABC VALUES (1,'20000-01-01','APPROVED')
INSERT INTO #ABC VALUES (1,'20001-01-01','DENIED')
INSERT INTO #ABC VALUES (1,'20003-01-01','ON HOLD')
INSERT INTO #ABC VALUES (1,'20002-01-01','APPROVED')
INSERT INTO #ABC VALUES (2,'20008-01-01','DENIED')
INSERT INTO #ABC VALUES (2,'20004-01-01','DENIED')
INSERT INTO #ABC VALUES (3,'20006-01-01','ON HOLD')
INSERT INTO #ABC VALUES (3,'20005-01-01','APPROVED')
INSERT INTO #ABC VALUES (3,'20009-01-01','DENIED')
INSERT INTO #ABC VALUES (4,'20001-01-01','ON HOLD')
INSERT INTO #ABC VALUES (4,'20004-01-01','ON HOLD')
INSERT INTO #ABC VALUES (4,'20007-01-01','DENIED')
INSERT INTO #ABC VALUES (5,'20005-01-01','ON HOLD')
INSERT INTO #ABC VALUES (5,'20008-01-01','ON HOLD')
INSERT INTO #ABC VALUES (5,'20009-01-01','APPROVED')
Тогда искомый результат:
ID RESULT EVER_APPROVED EVER_DENIED EVER_ON_HOLD
1 'APPROVED THEN ON HOLD' 'Y' 'Y' 'Y'
2 'DENIED' 'N' 'Y' 'N'
3 'APPROVED THEN DENIED' 'Y' 'Y' 'Y'
4 'ON HOLD THEN DENIED' 'N' 'Y' 'Y'
5 'ON HOLD THEN APPROVED' 'Y' 'N' 'Y'
попробовал что-нибудь или ..? – jurgenreza
Я действительно застрял. Обычно я использую шаг данных SAS, но больше не имею доступа к SAS. Я бы предположил, что могу использовать MIN и MAX в полях даты, чтобы идентифицировать первые последние события на ID, но я не уверен. – user1126915