postgresql按创建时间正序对排序字段赋值
需求实现:
给某表新增一个sort_no字段,表中的历史数据要根据创建时间从1递增+1来设置sort_no的值
解决方案:
1、使用ROW_NUMBER()为按创建时间排序后返回的记录生成行编号
2、根据主键id赋值行编号给对应的sort_no
WITH tmp as( SELECT ROW_NUMBER() OVER() as rownum, pk_id as tid FROM 某表)
UPDATE 某表 SET sort_no = rownum FROM tmp WHERE pk_id = tmp.tid;
效果如图:
知识补充:
1、ROW_NUMBER() 语法
ROW_NUMBER() OVER( [ PRITITION BY col1] ORDER BY col2[ DESC ] )
2、WITH查询是
PostgreSQL的高级特性之一,这一特性通常被称为
CTE(Common Table Expressions),
WITH查询在复杂的查询语句中定义辅助语句(可以理解成查询语句中的临时表)
扩展:
使用序列来为排序字段赋值