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

编写MySQL查询设置用户started_at字段:按晋升历史赋值或取创建时间

解决方案

要实现更新users表的started_at字段需求,可以通过子查询获取用户最后一次晋升时间,再结合LEFT JOIN和COALESCE函数完成条件赋值,具体SQL语句如下:

UPDATE users u
LEFT JOIN (
    SELECT uuid, MAX(updated_at) AS last_promote_time
    FROM history
    WHERE promoted = 1
    GROUP BY uuid
) h ON u.uuid = h.uuid
SET u.started_at = COALESCE(h.last_promote_time, u.created_at);

语句说明

  • 子查询部分:从history表中筛选出所有晋升记录(promoted=1),按uuid分组后取每组最大的updated_at,即每个用户最后一次晋升的时间。
  • LEFT JOIN:确保所有users表的用户都能被匹配到,即使该用户没有任何晋升记录。
  • COALESCE函数:如果子查询返回了last_promote_time(即用户有晋升记录),则用该值更新started_at;如果子查询无结果(无晋升记录),则使用用户的created_at值。

验证逻辑(可选)

如果需要先验证更新结果而不实际修改数据,可以用查询语句预览:

SELECT 
    u.uuid,
    u.promoted,
    COALESCE(h.last_promote_time, u.created_at) AS new_started_at,
    u.started_at AS old_started_at,
    u.created_at
FROM users u
LEFT JOIN (
    SELECT uuid, MAX(updated_at) AS last_promote_time
    FROM history
    WHERE promoted = 1
    GROUP BY uuid
) h ON u.uuid = h.uuid;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:17:40