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

MySQL排序实现:优先展示状态为'Due'的最新发票

MySQL发票排序方案:优先展示'Due'状态的最新发票

嘿,这个需求很实用,我来给你说说具体怎么实现~

核心思路是先按状态优先级排序,再按发票新旧排序:我们可以用MySQL的CASE表达式给不同状态分配优先级,让'Due'状态的发票拥有最高优先级排在最前面,然后在同一优先级内,按发票的日期倒序排列,保证最新的发票先展示。

基础实现SQL

假设你的发票表名为invoices,记录发票日期的字段是invoice_date,那排序的SQL可以这么写:

SELECT *
FROM invoices
ORDER BY
  -- 给'Due'状态最高优先级,排在最前面
  CASE WHEN status = 'Due' THEN 0 ELSE 1 END ASC,
  -- 同一状态下,最新的发票先显示
  invoice_date DESC;

代码解释

  • CASE WHEN status = 'Due' THEN 0 ELSE 1 END ASC:这里把'Due'状态的发票标记为0,其他所有状态标记为1。升序排列时,0会排在1前面,完美实现'Due'发票优先展示的需求。
  • invoice_date DESC:在同一优先级分组里(比如都是'Due'或者都是其他状态),按发票日期从新到旧排序,确保最新的发票最先出现。

扩展:自定义其他状态的优先级

如果除了'Due',你还想给其他状态设置特定的展示顺序(比如'Overdue'排在'Paid'前面),可以扩展CASE表达式:

SELECT *
FROM invoices
ORDER BY
  CASE status
    WHEN 'Due' THEN 0
    WHEN 'Overdue' THEN 1
    WHEN 'Paid' THEN 2
    ELSE 3 -- 其他未定义的状态排在最后
  END ASC,
  invoice_date DESC;

注意:如果你的日期字段不是invoice_date,换成你实际使用的字段(比如created_at、issue_date)就可以啦~

内容的提问来源于stack exchange,提问作者Abdus Sattar Bhuiyan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:05:51