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

MySQL:基于布尔值(TRUE优先)与timestamp的排序问题

SQL排序问题:按Active分组后统一排序timestamp

原始数据表

IdActivetimestamp
1TRUE23-09-10
2NULL23-09-11
3FALSE23-09-12
4TRUE23-09-15
5NULL23-09-16

排序需求

  • 优先展示Active = TRUE的记录,这部分按timestamp升序排列
  • 再展示Active = FALSE或Active IS NULL的记录,这部分整体按timestamp升序排列

尝试过的写法

我第一次用CASE语句处理ORDER BY,试了两种写法:

ORDER BY (case when active then 0 else 1 end), timestamp;

或者(存在字段名拼写错误):

ORDER BY actif IS TRUE DESC, timestamp;

当前得到的排序结果

IdActivetimestamp
1TRUE23-09-10
4TRUE23-09-15
3FALSE23-09-12
2NULL23-09-11
5NULL23-09-16

这个结果中,FALSE和NULL的记录没有按timestamp统一排序,不符合需求。

期望的排序结果

IdActivetimestamp
1TRUE23-09-10
4TRUE23-09-15
2NULL23-09-11
3FALSE23-09-12
5NULL23-09-16

解决方案

问题出在要么字段名拼写错误,要么数据库在分组后额外按Active字段排序。以下两种写法可以正确实现需求:

方法1:明确分组的CASE语句

ORDER BY
    CASE
        WHEN Active = TRUE THEN 0
        ELSE 1  -- 将FALSE和NULL归为同一组
    END,
    timestamp;

方法2:简洁的IS TRUE判断(修正拼写)

把之前的actif改为正确的字段名active,这个写法更简洁:

ORDER BY
    Active IS TRUE DESC,
    timestamp;

这两种写法都会先将Active = TRUE的记录按timestamp升序排列,再把FALSE和NULL的记录整体按timestamp升序排列,得到你期望的结果。

另外请确认timestamp字段是日期类型,或者是YY-MM-DD格式的字符串(保证字符串排序和日期顺序一致),避免排序异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:39:54