如何通过Partition by与Order by实现按Title分组、Active及Expire_date排序?
正确SQL实现方案
根据你的需求,同时满足同Title记录分组显示、Active排序、Expire_date排序三个要求的SQL写法如下:
SELECT * FROM `table` ORDER BY -- 按每个Title组的最大过期日期升序,确定各组的排列顺序 MAX(`Expire_date`) OVER (PARTITION BY `Title`), -- 组内先按Active降序,确保Active=1的记录排在同组Active=0的前面 `Active` DESC, -- 组内同Active的记录,按过期日期降序排列 `Expire_date` DESC;
逻辑说明:
- 组排序:通过窗口函数
MAX(Expire_date) OVER (PARTITION BY Title)计算每个Title组的最大过期日期,以此作为组的排序依据升序排列,完全匹配你期望结果中Fruit_999→Orange→Banana→Apple的组顺序。 - 组内Active排序:
Active DESC确保同组内Active=1的记录优先显示,对应你期望中Banana、Apple组内Active=1记录在前的要求。 - 组内日期排序:
Expire_date DESC让同组同Active的记录按日期从新到旧排列,符合你期望中Apple组内Active=0记录2021→2020的顺序。
内容的提问来源于stack exchange,提问作者Gobuz MOND
相关产品推荐
相关产品推荐

