You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中基于updated_at列生成desc_id列(按时间从旧到新降序)

实现步骤说明

假设你的表名为your_table_name,请替换为实际表名,按以下步骤操作:

1. 添加desc_id列

首先给表新增一个用于存储目标ID的列:

ALTER TABLE your_table_name ADD COLUMN desc_id INT;

2. 计算并更新desc_id值

方法一:MySQL 8.0及以上版本(推荐,支持窗口函数)

利用ROW_NUMBER()窗口函数,按updated_at从新到旧排序,直接生成对应ID:

UPDATE your_table_name t
JOIN (
    SELECT id, ROW_NUMBER() OVER (ORDER BY updated_at DESC) AS new_desc_id
    FROM your_table_name
) AS sub ON t.id = sub.id
SET t.desc_id = sub.new_desc_id;

方法二:MySQL 5.x版本(兼容旧版本)

使用用户变量来实现排序计数:

SET @row_num = 0;
UPDATE your_table_name t
JOIN (
    SELECT id, (@row_num := @row_num + 1) AS new_desc_id
    FROM your_table_name
    ORDER BY updated_at DESC
) AS sub ON t.id = sub.id
SET t.desc_id = sub.new_desc_id;

3. 可选:优化列属性

如果需要确保desc_id不为空,可以修改列属性:

ALTER TABLE your_table_name MODIFY COLUMN desc_id INT NOT NULL;

补充说明

  • 如果存在多条记录updated_at完全相同的情况,若希望相同时间的记录拥有相同的desc_id,可以将ROW_NUMBER()替换为RANK()或DENSE_RANK(),具体根据你的需求选择。

内容的提问来源于stack exchange,提问作者Tammapao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:21:35