Выберите конкретную промежуточную запись из таблицы sybase

У меня есть таблица с данными, как показано ниже:

Id               stage              date             Emp_id3
=====        =====           =====              =====
DEP1          new             12thmarch         33
DEP1          approval        13thmarch         22
DEP1          reject          14thmarch         77
DEP1          approval        15thmarch         66
DEP1          reject          16thmarch         65
DEP1          approval        17thmarch         87
DEP1          complete        18thmarch         99

Я хочу найти того Emp_id3, который переместил промежуточные данные из брака в стадию одобрения. В этом случае это будет 87, поскольку это последнее утверждение. Это таблица аудита, которая имеет поэтапные данные для своей основной таблицы, которая содержит данные текущего этапа. Может кто-нибудь помочь мне с запросом sybase для того же? Любая помощь будет высоко ценится.

1 ответ

Решение

Проблема, которую вы описали, затрагивает проблему Sybase, а не функцию ранга. Ниже я создал пример решения, которое включает использование временных таблиц. Дополнительное предположение заключается в том, что дата должна быть в формате, который обеспечивает уникальность ( DATETIME должно быть достаточно).

CREATE TABLE #temp
(
id VARCHAR(20),
stage VARCHAR(20),
DATE INT,
Emp_id3 INT)

INSERT INTO #temp
 select "DEP1", "new",    12,33
 union select "DEP1", "approval",13,22
 union select "DEP1", "reject", 14,77
 union select "DEP1", "approval",15,66
 union select "DEP1", "reject", 16,65
 union select "DEP1", "approval",17,87
 union select "DEP1", "complete",18,99

SELECT *, rank = identity(1) into #temp_rk FROM #temp ORDER BY DATE

SELECT changer.Emp_id3 FROM 
#temp_rk changer,#temp_rk originator
WHERE
    changer.stage="approval"
    AND originator.stage ="reject"
    AND changer.rank -1 = originator.rank
HAVING changer.rank = max(changer.rank)
Другие вопросы по тегам