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

MySQL查询:如何获取作者唯一的最新3篇文章

解决获取最新3篇作者唯一文章的SQL问题

嘿,我来帮你搞定这个SQL问题~首先得指出你原来的语句存在两个明显问题:

  • 字段名写错啦:表中的作者字段是author_id,但你写成了user_id
  • DISTINCT的逻辑不符合需求:DISTINCT是对整行数据去重,而不是单独针对author_id。因为每个id本身就是唯一的,所以(id, author_id)的组合本来就不会重复,这条语句根本起不到去重作者的作用。

正确解法1:使用窗口函数(推荐,逻辑清晰)

窗口函数是处理这类「分组取最值」问题的最优方案之一,代码如下:

SELECT id
FROM (
    SELECT 
        id, 
        author_id,
        -- 按作者分组,组内按文章id降序排序,给每篇文章标序号
        ROW_NUMBER() OVER (PARTITION BY author_id ORDER BY id DESC) AS rn
    FROM article
) t
-- 只保留每个作者最新的那篇(序号为1的)
WHERE rn = 1
-- 按文章id降序取前3个
ORDER BY id DESC
LIMIT 3;

执行这条语句后,就能得到你预期的结果:7、5、3。

正确解法2:使用关联子查询

如果你用的数据库不支持窗口函数(比如一些老版本的MySQL),可以用关联子查询实现:

SELECT a.id
FROM article a
-- 筛选出每个作者对应的最大文章id
WHERE a.id = (SELECT MAX(id) FROM article WHERE author_id = a.author_id)
ORDER BY a.id DESC
LIMIT 3;

这个逻辑是先找到每个作者发布的最新文章id,再把这些id收集起来,按降序取前3个,同样能得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:06:29