我使用的是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脚本来规范化版本字符串并将它们与更高的值进行比较.