sybase — обновите столбец, чтобы он был идентификатором, упорядоченным по определенным значениям

#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]