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

如何实现SQL表按Title分组、Active优先及指定Date排序的查询?

解决方法

你的需求核心是分组排序:先按每个Title的有效记录(Active=1)的日期升序排列各组,组内优先展示Active=1的记录,再展示同组的其他记录。不需要用GROUP BY(它是用来聚合数据的,不是做排序分组展示的),直接通过ORDER BY结合子查询或窗口函数就能实现。

方案1:使用子查询指定组排序依据

SELECT Title, Date, Active
FROM your_table
ORDER BY
    -- 按每个Title对应Active=1的日期升序排列各组
    (SELECT Date FROM your_table t2 WHERE t2.Title = t1.Title AND t2.Active = 1) ASC,
    -- 组内Active值降序,1优先展示
    Active DESC,
    -- 组内日期降序,确保同组内最新记录在前
    Date DESC;

方案2:使用窗口函数简化逻辑

如果你的SQL支持窗口函数(比如MySQL 8+、PostgreSQL、SQL Server等),可以用MAX()窗口函数直接获取每组的最新日期(也就是Active=1的日期),写法更简洁:

SELECT Title, Date, Active
FROM your_table
ORDER BY
    -- 按每组的最大日期(即Active=1的日期)升序排组
    MAX(Date) OVER (PARTITION BY Title) ASC,
    Active DESC,
    Date DESC;

逻辑说明

  1. 外层ORDER BY的第一个条件:确定整个结果中各组的顺序——以每个Title对应的Active=1的日期升序排列,所以B组(2022-01-01)排在最前,A组(2022-02-01)次之,C组(2022-04-01)最后。
  2. 第二个条件:组内优先展示Active=1的记录,所以每个组内有效记录在前。
  3. 第三个条件:同组内按日期降序,确保最新的记录排在前面(和你的期望结果一致)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 22:25:23