当前位置: 首页 > news >正文

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

背景

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

问题

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

解决思路

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

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_inFROM tbl_material_info WHERE material_code IN ('P120','P525A','2070039115')

改写语句

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 rnFROM 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;

http://www.mrgr.cn/news/15443.html

相关文章:

  • 构建高可用性Nginx:配置策略与最佳实践
  • java中的Opencv:Opencv简介与开发环境部署
  • pnpm国内源设置
  • Nginx负载均衡中的连接超时处理:策略与配置
  • Java中的分布式一致性与共识算法
  • 【Git】在 Windows 和 Linux 上配置 SSH 密钥并初始化 Git 项目
  • 脚手架工具的应用(前端和后端搭建)
  • nginx 负载均衡详解与实现方法案例
  • SQL 语句及其分类
  • 鸿蒙HarmonyOS之使用preferences首选项保存获取数据
  • 三行五行的 SQL 只存在于教科书和培训班
  • STL容器中 list(双向链表)的增删改查
  • 什么是跨域问题?出现的原因和解决方法是什么?
  • 记录一次两台虚拟机Oracle rac 心跳不能建立的排查
  • 【对象存储】MINIO_RELEASE.2024-08-17T01-24-54Z-cpuv1部署与操作
  • 2024.8.26 Python,最大子数和与动态规划,最小路径和,分割回文串,字典序排数,最长重复子数组(动态规划)
  • 斯坦福大学cs231n (图像分类)
  • Android如何高效的加载大型位图
  • 【JVM】执行引擎、JIT、逃逸分析(二)
  • MVC与设计模式理解-lnmp学习之路