這會給你每個artifact_type
的最高版本,只要你只有數字和點(即不是3.0.2.1.1b或其他)。這是甲骨文12C
SELECT a.artifact_type, a.artifact_version, a.artifact_blob
FROM
artifacts a
WHERE a.artifact_version =
(
SELECT b.artifact_version
FROM
artifacts b
WHERE b.artifact_type = a.artifact_type
ORDER
BY CAST(REGEXP_SUBSTR(b.artifact_version,'[^.]+',1, 1) AS NUMBER) DESC,
CAST(REGEXP_SUBSTR(b.artifact_version,'[^.]+',1, 2) AS NUMBER) DESC,
CAST(REGEXP_SUBSTR(b.artifact_version,'[^.]+',1, 3) AS NUMBER) DESC,
CAST(REGEXP_SUBSTR(b.artifact_version,'[^.]+',1, 4) AS NUMBER) DESC,
CAST(REGEXP_SUBSTR(b.artifact_version,'[^.]+',1, 5) AS NUMBER) DESC
FETCH FIRST 1 ROWS ONLY
)
/
爲11g中,您將需要使用ROWNUM技巧來限制在子選擇僅第一行的行集。
請勿在表格中添加額外的列。最新版本更改時數據不一致的風險太高。 (或者使用觸發器來確保始終有效的值。) – jarlh 2015-02-06 11:52:41