sybase - обновить столбец, чтобы он был идентичным, упорядоченным по определенным значениям
Я хочу обновить столбец последовательности ниже, чтобы он стал столбцом IDENTITY в будущем, и текущие строки должны быть обновлены, чтобы упорядочиться по возрастанию 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
2 ответа
Я сделал это, присоединив таблицу к себе, но с 1 дополнительной строкой идентификатора. Эта дополнительная строка создается с помощью функции ROW_NUMBER, упорядочивая по возрастанию update_time. Что-то вроде...
ОБНОВЛЕНИЕ myTable SET update_seq = tmp.ID ИЗ myTable ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ update_time, data, ROW_NUMBER() OVER (ORDER BY update_seq ASC) в качестве идентификатора из myTable tmp для a.update_time = tmp.update_time и a.data = tmp.data
На Sybase ASA вы можете нумеровать столбец, используя это обновление:
update [table_name]
set [SEQUENCE]=number(*)
order by [UPDATE_TIME]