MySQL中如何使用DISTINCT与MAX获取各线程ID对应的最新日期
正确的MySQL查询语句解法
你原来的语句只返回一行的核心原因是:MAX()属于聚合函数,当没有搭配GROUP BY子句时,MySQL会把整个表当作一个单一分组计算,最终只会得到全局的最大日期,DISTINCT在这里无法按BOH_ThreadId拆分分组结果。
要获取每个唯一BOH_ThreadId对应的最大BOH_Date,正确写法是用GROUP BY按BOH_ThreadId分组,再对每个分组应用MAX()函数:
SELECT BOH_ThreadId, MAX(BOH_Date) AS Latest_Date FROM your_table_name GROUP BY BOH_ThreadId;
替换语句中的your_table_name为你实际的表名,执行后会得到预期结果:
| BOH_ThreadId | Latest_Date |
|---|---|
| Banana | 2024-04-25 |
| Apple | 2024-04-25 |
如果需要获取每个BOH_ThreadId最大日期对应的完整行数据(比如还有其他字段需要展示),可以用窗口函数ROW_NUMBER()实现:
SELECT BOH_ThreadId, BOH_Date AS Latest_Date FROM ( SELECT BOH_ThreadId, BOH_Date, ROW_NUMBER() OVER (PARTITION BY BOH_ThreadId ORDER BY BOH_Date DESC) AS rn FROM your_table_name ) t WHERE rn = 1;
这种方法适合更复杂的场景,同样能精准匹配每个分组的最新日期记录。
内容的提问来源于stack exchange,提问作者F__M
相关产品推荐
相关产品推荐

