这会给你每个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