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

开启sql_mode=only_full_group_by时,如何按user_id获取最小创建日期?

开启sql_mode=only_full_group_by时按user_id获取最小created_at的正确方法

你给出的SQL存在两个关键问题:

  1. 语法错误:连续写了两个GROUP BY子句,不符合SQL语法规范
  2. 分组逻辑错误:要获取每个user_id对应的最小created_at,应该仅按user_id分组——你错误地把created_at也加入分组,会把每个不同的时间戳拆成独立分组,根本得不到每个用户的最小时间

正确SQL写法

如果只是单纯按user_id获取对应的最小created_at,同时符合only_full_group_by的要求,写法如下:

SELECT
    user_id,
    MIN(created_at) AS min_created_at
FROM
    subscribers
GROUP BY
    user_id

开启only_full_group_by后,SELECT子句中的非聚合字段必须全部出现在GROUP BY中,这里user_id是唯一的非聚合字段,和GROUP BY完全匹配,不会触发语法错误。

如果要加上日期筛选条件(对应你原SQL里的需求),直接用聚合后的日期比较即可,无需格式化:

SELECT
    user_id,
    MIN(created_at) AS min_created_at
FROM
    subscribers
GROUP BY
    user_id
HAVING
    MIN(created_at) > '2022-10-01'

不过结合你给出的数据示例,这个筛选条件不会返回任何结果——所有用户的最小created_at都早于2022-10-01。如果你的预期结果是要得到所有用户的user_id,去掉HAVING子句即可。

数据示例

user_idcreated_at
122022-11-11 12:10:11
132021-10-11 12:10:11
122022-08-11 11:10:11
152022-08-11 11:10:11

仅按user_id获取最小created_at的结果

user_idmin_created_at
122022-08-11 11:10:11
132021-10-11 12:10:11
152022-08-11 11:10:11

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 10:24:14