SQL查询表中的最新版本

时间:2017-09-21 12:13:11

标签: sql oracle

需要oracle sql查询才能获得最新的更新版本。我有一个sql表,其中包含以下列,Application&版本ID。

在下面的示例中,我为Application ABC及其相应的子版本提供了不同的版本ID。我需要为版本ID检索最新的subversion。 例如,对于版本ID 1,我没有任何颠覆,因此VersionId = 1将是最新版本,需要拉出此记录。类似地,在版本ID 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 个答案:

答案 0 :(得分: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;