SQLite中如何按时间戳更新表ID并填充sort_id列?
SQLite表a新增sort_id并分配连续序号的高效方案
1. 先添加sort_id列
执行SQL给table_a新增整数类型的sort_id字段:
ALTER TABLE table_a ADD COLUMN sort_id INTEGER;
2. 用窗口函数直接更新序号
利用SQLite的窗口函数ROW_NUMBER(),按timestamp升序生成连续的1、2、3...序号,直接更新原表,无需重新插入数据:
WITH ranked_records AS ( SELECT a_id, ROW_NUMBER() OVER (ORDER BY timestamp ASC) AS seq FROM table_a ) UPDATE table_a SET sort_id = ranked_records.seq FROM ranked_records WHERE table_a.a_id = ranked_records.a_id;
注意事项
- 该方法要求SQLite版本在3.25.0及以上(窗口函数从这个版本开始支持)
- 若存在timestamp相同的记录,
ROW_NUMBER()会给它们分配不同序号;如果需要相同时间戳的记录序号一致,可替换为RANK()或DENSE_RANK(),根据实际需求调整 - 操作直接在原表上完成,避免了数据迁移的额外开销,效率较高
内容的提问来源于stack exchange,提问作者xxjoe
相关产品推荐
相关产品推荐

