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

MySQL中如何获取SUBSTRING的DISTINCT值?

MySQL中获取子字符串去重值的方法

根据你的需求,分两种场景给出可行方案:

场景1:仅需获取去重后的mytime值

如果只需要提取去重的日期子串(mytime),可以直接用DISTINCT修饰目标字段,或者用GROUP BY实现:

方法1:使用DISTINCT

SELECT DISTINCT SUBSTRING(t2.start_time, 1, 10) AS mytime
FROM post_table t1 
INNER JOIN watchUserList t2 ON t1.id = t2.movie_id 
WHERE t2.user = 'john@gmail.com';

方法2:使用GROUP BY

SELECT SUBSTRING(t2.start_time, 1, 10) AS mytime
FROM post_table t1 
INNER JOIN watchUserList t2 ON t1.id = t2.movie_id 
WHERE t2.user = 'john@gmail.com'
GROUP BY mytime;

场景2:保留原查询的其他字段,同时保证mytime唯一

如果需要保留t2.id、t1.image等字段,同时确保每个mytime只出现一次,需要先通过子查询确定每个mytime对应的目标记录(比如取最新的id),再关联原表获取完整数据:

SELECT t2.id, t1.image, SUBSTRING(t2.start_time, 1, 10) AS mytime, t2.user
FROM post_table t1 
INNER JOIN watchUserList t2 ON t1.id = t2.movie_id 
INNER JOIN (
    -- 按mytime分组,获取每个分组的最大id(代表最新记录)
    SELECT SUBSTRING(start_time, 1, 10) AS mytime, MAX(id) AS max_id
    FROM watchUserList
    WHERE user = 'john@gmail.com'
    GROUP BY mytime
) AS temp ON SUBSTRING(t2.start_time, 1, 10) = temp.mytime AND t2.id = temp.max_id
WHERE t2.user = 'john@gmail.com'
ORDER BY t2.id DESC;

关于你之前尝试的问题

DISTINCT不是函数,它是作用于整个SELECT结果集的关键字——如果SELECT中包含多个字段,DISTINCT会对所有字段的组合去重,而不是单独处理某一个字段。所以你之前的写法无法实现仅对mytime去重的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:25:17