#sql #sybase #identity #asa
#sql #sybase #идентификатор #asa
Вопрос:
Я хочу обновить столбец последовательности ниже, чтобы в будущем он был столбцом идентификатора, и текущие строки должны быть обновлены, чтобы упорядочиваться по возрастанию update_time.
Как мне это сделать в Sybase? Упрощенный пример того, что у меня есть ниже.
Текущая таблица:
SEQUENCE | UPDATE_TIME | DATA
null | 2016-01-01 | x
null | 2013-01-01 | y
null | 2015-01-01 | z
Требуемая таблица:
SEQUENCE | UPDATE_TIME | DATA
3 | 2016-01-01 | x
1 | 2013-01-01 | y
2 | 2015-01-01 | z
Ответ №1:
Я сделал это, присоединив таблицу к самой себе, но с 1 дополнительной строкой идентификатора. Эта дополнительная строка создается с помощью функции ROW_NUMBER путем упорядочивания update_time по возрастанию. Что-то вроде…
ОБНОВИТЕ myTable, УСТАНОВИВ update_seq = tmp.ИДЕНТИФИКАТОР Из myTable внутреннее СОЕДИНЕНИЕ ( ВЫБЕРИТЕ update_time, data, ROW_NUMBER() ПОВЕРХ (ПОРЯДОК По update_seq ASC) в качестве идентификатора из myTable tmp в.update_time = tmp.update_time и.data = tmp.data
Ответ №2:
В Sybase ASA вы можете нумеровать столбец, используя это обновление:
update [table_name]
set [SEQUENCE]=number(*)
order by [UPDATE_TIME]