小编sha*_*uar的帖子

找到最好的版本

我使用的是Oracle Database 11g企业版11.2.0.2.0版

我有一张表如下:

Table1:
Name              Null     Type          
----------------- -------- ------------- 
NAME              NOT NULL VARCHAR2(64)  
VERSION           NOT NULL VARCHAR2(64) 


Table1
Name    Version
---------------
A         1
B         12.1.0.2
B         8.2.1.2
B         12.0.0
C         11.1.2
C         11.01.05
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

Name    Version
---------------
A        1
B        12.1.0.2
C        11.01.05
Run Code Online (Sandbox Code Playgroud)

基本上,我想获得具有最高版本的每个名称的行.为此,我使用以下查询:

SELECT t1.NAME, 
       t1.VERSION
FROM TABLE1 t1 
LEFT OUTER JOIN TABLE1 t2
on (t1.NAME = t2.NAME and t1.VERSION < t2.VERSION)
where t2.NAME is null
Run Code Online (Sandbox Code Playgroud)

现在't1.VERSION <t2.VERSION'仅适用于正常版本的情况,但在以下情况下:

B         12.1.0.2
B         8.2.1.2
Run Code Online (Sandbox Code Playgroud)

它失败了,我需要一个PL/SQL脚本来规范化版本字符串并将它们与更高的值进行比较.

oracle plsql oracle11g

3
推荐指数
1
解决办法
294
查看次数

标签 统计

oracle ×1

oracle11g ×1

plsql ×1