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

如何按Type(A→B→C→D→E)及Last Submit倒序排序SQL数据

如何编写SQL实现指定排序逻辑?

原始数据

Customer IDNameTypeLast Submit
1PatricioCJanuary 2022
2DaleAJune 2022
3YvonneCJuly 2022
4PaweCJune 2022
5SergioBAugust 2022
6RolandCAugust 2022
7GeorgDNovember 2022
8CatherineDOctober 2022
9PascaleEOctober 2022
10IreneANovember 2022

需求

先按Type字段以A、B、C、D、E的固定顺序排序,同Type内按Last Submit字段倒序(最新提交在前)排列,最终结果如下:

目标结果

Customer IDNameTypeLast Submit
10IreneANovember 2022
2DaleAJune 2022
5SergioBAugust 2022
6RolandCAugust 2022
3YvonneCJuly 2022
4PaweCJune 2022
1PatricioCJanuary 2022
7GeorgDNovember 2022
8CatherineDOctober 2022
9PascaleEOctober 2022

SQL解决方案

方法一:使用FIELD()函数(适用于MySQL/MariaDB)

SELECT 
    `Customer ID`,
    Name,
    Type,
    `Last Submit`
FROM 
    your_table_name
ORDER BY 
    FIELD(Type, 'A', 'B', 'C', 'D', 'E'),
    STR_TO_DATE(`Last Submit`, '%M %Y') DESC;

方法二:使用CASE表达式(通用SQL,适配多数数据库)

SELECT 
    "Customer ID",
    Name,
    Type,
    "Last Submit"
FROM 
    your_table_name
ORDER BY 
    CASE Type
        WHEN 'A' THEN 1
        WHEN 'B' THEN 2
        WHEN 'C' THEN 3
        WHEN 'D' THEN 4
        WHEN 'E' THEN 5
        ELSE 6 -- 处理不在A-E范围内的类型,放在最后
    END,
    TO_DATE("Last Submit", 'Month YYYY') DESC;

逻辑说明

  1. 按Type固定顺序排序:
    • FIELD()函数直接指定Type的排序优先级,匹配到的顺序对应1、2、3、4、5,未匹配的类型会排在最后。
    • CASE表达式通过将Type映射为数字实现固定顺序,确保A到E依次排列。
  2. 同Type内按Last Submit倒序:
    • 先将Last Submit的字符串格式(如"November 2022")转换为日期类型,再按降序排列,保证最新提交日期在前。不同数据库的日期转换函数略有差异:
      • MySQL/MariaDB用STR_TO_DATE()
      • PostgreSQL用TO_DATE()
      • SQL Server用CONVERT(DATE, "Last Submit", 109)

内容的提问来源于stack exchange,提问作者dimas tatag anditya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:20:54