将列更新为标识,按某些值排序



我想在将来将下面的序列列更新为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

我通过将表连接到表本身来实现这一点,但增加了1个ID行。这个额外的行是使用ROW_NUMBER函数通过按update_time升序排序创建的。类似…

UPDATE myTable SET update_seq = tmp。ID从表中创建一个INNER JOINSELECT update_time, data, ROW_NUMBER() OVER (ORDER BY update_seq ASC)作为IDOn a.update_time = tmp.update_timea.data = tmp.data

在Sybase ASA上,您可以使用以下更新来计算列:

update [table_name]
set [SEQUENCE]=number(*)
order by [UPDATE_TIME]

最新更新