2017-09-21 43 views
0

需要使用oracle sql查詢來獲取最新的更新版本。我有一個SQL表,它具有以下列,應用程序&版本ID。表中最新版本的SQL查詢

在下面的示例中,我爲應用程序ABC及其相應的子版本提供了不同的版本ID。我需要檢索版本ID的最新版本。 例如,對於版本ID 1,我沒有任何子版本,因此VersionId = 1將是最新版本並需要提取此記錄。同樣在版本號2下,我有兩個子版本2.1和2.2。 2.1以下,沒有進一步的顛覆,所以2.1將是最新版本,需要拉這個。再次根據2.2我們有2.2.1和再次根據2.2.1,我們有2.2.1.1作爲最新版本,並需要獲取此記錄。同樣,我需要使用Oracle SQL查詢從表中獲取下面提到的所有最新子版本。

例如:

Application | Version Id 
:-----------|-------------: 
ABC   | 1 (latest in Version 1) 
ABC   | 2 
ABC   | 2.1 (latest in version 2.1) 
ABC   | 2.2 
ABC   | 2.2.1 
ABC   | 2.2.1.1 (latest in version 2.2.1) 
ABC   | 2.2.2  
ABC   | 2.2.2.1  
ABC   | 2.2.2.1.1 (latest in version 2.2.2.1)  
ABC   | 2.2.2.2 (latest in version 2.2.2.2)  
ABC   | 2.3 (latest in version 2.3)  
ABC   | 2.4 
ABC   | 2.4.1 (latest in version 2.4) 
ABC   | 2.5 
ABC   | 2.5.1 (latest in version 2.4) 

回答

1

試試這個:

with data (application, version) as 
(
select 'ABC', '1' from dual 
union all select 'ABC', '2' from dual 
union all select 'ABC', '2.1' from dual 
union all select 'ABC', '2.2' from dual 
union all select 'ABC', '2.2.1' from dual 
union all select 'ABC', '2.2.1.1' from dual 
union all select 'ABC', '2.2.2' from dual 
union all select 'ABC', '2.2.2.1' from dual 
union all select 'ABC', '2.2.2.1.1' from dual 
union all select 'ABC', '2.2.2.2' from dual 
union all select 'ABC', '2.3' from dual 
union all select 'ABC', '2.4' from dual 
union all select 'ABC', '2.4.1' from dual 
union all select 'ABC', '2.5' from dual 
union all select 'ABC', '2.5.1' from dual 
) 
select * from data d1 
where not exists (select null 
        from data d2 
        where d2.application = d1.application 
        and d2.version like d1.version||'.%') 
order by application, version;