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

MySQL如何按自定义状态优先级结合datetime升降序排序Event记录

MySQL多规则分组排序实现方案

你已经正确实现了第一级的分组优先级排序,只需要在ORDER BY后追加两级针对不同分组的时间排序规则即可,完整排序逻辑如下:

order by
  -- 第一级:按事件优先级分组排序,保证四类事件的先后顺序
  CASE
    WHEN E.status = 'started' THEN 1
    WHEN E.status = 'created' AND eventDateTime >= NOW() THEN 2
    WHEN E.status = 'created' AND eventDateTime < NOW() THEN 3
    WHEN E.status = 'finished' THEN 4
    ELSE 5
  END ASC,
  -- 第二级:对正在进行、即将发生的两类事件按时间升序排列
  CASE
    WHEN E.status = 'started' THEN eventDateTime
    WHEN E.status = 'created' AND eventDateTime >= NOW() THEN eventDateTime
    ELSE NULL
  END ASC,
  -- 第三级:对超时未启动、已结束的两类事件按时间降序排列
  CASE
    WHEN E.status = 'created' AND eventDateTime < NOW() THEN eventDateTime
    WHEN E.status = 'finished' THEN eventDateTime
    ELSE NULL
  END DESC;

逻辑说明

  • ORDER BY会按照书写顺序依次判断排序规则,上一级规则的返回值完全相同时,才会触发下一级规则判断,因此不会出现跨组排序混乱的问题
  • 不需要对应排序规则的分组在对应CASE中返回NULL,NULL在排序中会被统一归为一类,不会影响目标分组的排序结果
  • 建议将逻辑运算符&&替换为标准SQL的AND,兼容性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:36:02