Oracle Database 11gEnterpriseEditionリリース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
次のような出力が必要です。
Name Version
---------------
A 1
B 12.1.0.2
C 11.01.05
基本的に、バージョンが最も高い名前ごとに行を取得したいと思います。このために、私は次のクエリを使用しています。
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
現在、「t1.VERSION <t2.VERSION」は通常のバージョンの場合にのみ機能しますが、次のような場合にのみ機能します。
B 12.1.0.2
B 8.2.1.2
失敗します。バージョン文字列を正規化し、それらを比較してより高い値にするためのPL/SQLスクリプトが必要です。