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

如何编写SQL语句获取关联最新内容的5个唯一子分类?

解决方案:筛选最新的5个关联子分类

核心思路

通过content_subcategories中间表关联Subcategories与Content表,先获取每个子分类关联内容的最新创建时间,以此为排序依据,筛选出前5个不重复的子分类。

示例SQL语句

SELECT DISTINCT s.subcategory_id, s.subcategory_name, MAX(c.created_at) AS latest_content_time
FROM Subcategories s
JOIN content_subcategories cs ON s.subcategory_id = cs.subcategory_id
JOIN Content c ON cs.content_id = c.content_id
GROUP BY s.subcategory_id, s.subcategory_name
ORDER BY latest_content_time DESC
LIMIT 5;

语句说明

  • JOIN操作:借助中间表content_subcategories建立子分类与内容的关联,确保能获取子分类对应的所有关联内容。
  • MAX(c.created_at):计算每个子分类下关联内容的最新创建时间,作为排序的核心依据。
  • GROUP BY s.subcategory_id, s.subcategory_name:按子分类唯一标识分组,确保每个子分类仅返回一条结果(配合DISTINCT双重保障去重,也可仅依赖GROUP BY实现去重)。
  • ORDER BY latest_content_time DESC:按最新内容时间倒序排列,优先展示关联了最新内容的子分类。
  • LIMIT 5:仅保留前5条结果,满足需求数量。

替代写法(适用于特定场景)

如果需要更精准地基于单条最新内容关联子分类,可使用子查询先筛选内容的最新记录:

SELECT DISTINCT s.subcategory_id, s.subcategory_name, c.created_at AS latest_content_time
FROM Subcategories s
JOIN content_subcategories cs ON s.subcategory_id = cs.subcategory_id
JOIN (
    SELECT content_id, created_at
    FROM Content
    ORDER BY created_at DESC
) c ON cs.content_id = c.content_id
ORDER BY c.created_at DESC
LIMIT 5;

注意:第二种写法在数据量较大时性能可能不如第一种,因为子查询需先排序所有内容记录,建议优先使用分组取最大时间的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 04:45:33