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
相关产品推荐
相关产品推荐

