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;
相关推荐
发量惊人的中年网工19 分钟前
如何验证DDoS高防真的生效?从源站隐藏到正常访问的完整验收方法
运维·网络·数据库·ddos
吃杠碰小鸡23 分钟前
VsCode中开发Java项目
java·vscode
Aloudata34 分钟前
数据治理台账 vs 元数据知识图谱:数据资产如何从文档走向计算化
数据库·人工智能·知识图谱·数据治理·元数据·数据资产·数据血缘
宠友信息1 小时前
内容社区源码开发实践解析,用Spring Boot打造1:1仿小红书源码平台
java·spring boot·redis·websocket·mysql·spring·uni-app
jnrjian1 小时前
oraasmaudit Oracle ASM
数据库·oracle
行百里er1 小时前
加个依赖就生效?一行搞定 Spring Boot Starter 自动装配
java·后端·监控
A15362551 小时前
WMS 智能仓情系统推荐:如何实现仓库全局可视与数字化管控
运维·数据库·人工智能
月华路1 小时前
G1 新生代对象晋升老年代:实现机制与 GC 日志
java·jvm·算法
又是重名了1 小时前
大数据量导出 优化方案多版 第五版
数据库·优化·导出·大数据量
Data_Journal1 小时前
如何使用 Python 抓取 Google Flights:分步指南
大数据·开发语言·数据库·python·scrapy