SQL 对版本进行排序遇到的问题

背景

物料存在多个版本,我们每次只需要使用最新的版本

问题

  • 问题1:版本使用的是字符串,倒序排序,会导致 版本8 会排在版本11 前面
  • 问题2:版本version字符串既有数字字符串,也有字母字符串

解决思路

  • 对于数字字符串,需要将其转换成整数,
  • 字母字符串则转换成对应的ASCII码值

SQL语句

原本语句

sql 复制代码
    SELECT 
        material_code AS material_code_in,
        material_name AS material_name_in,
        '' AS material_type_in,
        material_class_small AS material_class_small_in,
        material_class_big AS material_class_big_in,
        erp_code AS erp_code_in,
        version AS version_in,
        unit AS unit_in
    FROM tbl_material_info 
    WHERE material_code IN ('P120','P525A','2070039115')

改写语句

sql 复制代码
WITH RankedMaterials AS (
    SELECT 
        material_code AS material_code_in,
        material_name AS material_name_in,
        '' AS material_type_in,
        material_class_small AS material_class_small_in,
        material_class_big AS material_class_big_in,
        erp_code AS erp_code_in,
        version AS version_in,
        unit AS unit_in,
        ROW_NUMBER() OVER (
            PARTITION BY material_code 
            ORDER BY 
                CASE 
                    WHEN TRY_CAST(version AS INT) IS NOT NULL THEN TRY_CAST(version AS INT) 
                    ELSE ASCII(SUBSTRING(version, 1, 1)) -- 将字母字符串转换为对应的ASCII码值
                END DESC
        ) AS rn
    FROM tbl_material_info 
    WHERE material_code IN ('P120','P525A','2070039115')
)
SELECT 
    material_code_in,
    material_name_in,
    material_type_in,
    material_class_small_in,
    material_class_big_in,
    erp_code_in,
    version_in,
    unit_in
FROM RankedMaterials
WHERE rn = 1;
相关推荐
IvorySQL11 分钟前
PostgreSQL 技术日报 (3月7日)|生态更新与内核性能讨论
数据库·postgresql·开源
xiaoye20181 小时前
Lettuce连接模型、命令执行、Pipeline 浅析
java
赵渝强老师1 小时前
【赵渝强老师】金仓数据库的数据文件
数据库·国产数据库·kingbase·金仓数据库
随逸1774 小时前
《Milvus向量数据库从入门到实战,手把手搭建语义检索系统》
数据库
beata4 小时前
Java基础-18:Java开发中的常用设计模式:深入解析与实战应用
java·后端
Seven975 小时前
剑指offer-81、⼆叉搜索树的最近公共祖先
java
神秘的猪头5 小时前
🚀 React 开发者进阶:RAG 核心——手把手带你玩转 Milvus 向量数据库
数据库·后端·llm
雨中飘荡的记忆1 天前
保证金系统入门到实战
java·后端
Nyarlathotep01131 天前
Java内存模型
java
IvorySQL1 天前
PostgreSQL 技术日报 (3月6日)|为什么 Ctrl-C 在 psql 里让人不安?
数据库·postgresql·开源