Выберите конкретную промежуточную запись из таблицы 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)