Sql通过视图获取最大版本组,并包含其他列值

时间:2017-08-22 08:53:25

标签: sql plsql

enter image description here

我正在尝试选择此表中的所有值,按view_name分组,版本最高

所以我想选择core_id 1234和1236

的行
SELECT
  MAX(version),
  view_name
FROM csa_help_admin cha
GROUP BY view_name

以上选项会获取我想要的行,但由于汇总了我无法获得core_idhelp_active

我意识到group by是一个聚合函数,但是有人建议如何获得所需的结果

我正在使用pl sql

5 个答案:

答案 0 :(得分:2)

Oracle具有非常高效的特定语法

select
    max(core_id) keep (dense_rank last order by version),
    view_name
from csa_help_admin cha 
group by view_name

表示在具有更高版本的行上获取max core_id,max以防止有许多行具有相同的view_name和版本。

使用help_active列进行编辑:

select
    max(core_id) keep (dense_rank last order by version),
    max(help_active) keep (dense_rank last order by version),
    view_name
from csa_help_admin cha 
group by view_name

答案 1 :(得分:1)

一种解决方案可以是使用您提出的语句,并将其连接回原始表以获得您需要的所有内容:

select * from csa_help_admin cha
inner join (
    select max(version) as version, view_name 
    from csa_help_admin cha 
    group by view_name
) B on cha.version = B.version and cha.view_name = B.view_name

答案 2 :(得分:0)

希望这有助于满足您的需求。

SELECT CORE_ID,
  VERSION,
  VIEW_NAME,
  HELP_ACTIVE
FROM
  (SELECT CORE_ID,
    VERSION,
    VIEW_NAME,
    HELP_ACTIVE,
    ROW_NUMBER() OVER(ORDER BY VERSION DESC) RN
  FROM CSA_HELP_ADMIN
  )A
WHERE A.RN = 1;
/

答案 3 :(得分:0)

以与上面提到的相同的方式,您可以使用临时查询(我不知道加入请求是否适用于每个RDBMS):

with tmp_req as (
select max(version) as version, view_name 
    from csa_help_admin cha 
    group by view_name
)
select csa.* from csa_help_admin csa
where
csa.version = tmp_req.version and
csa.view_name = tmp_req.view_name;

答案 4 :(得分:0)

select b.* 
from (select max(version) version, view_name 
      from csa_help_admin  
      group by view_name) a 
inner join csa_help_admin b 
on a.version =b.version and 
a.view_name = b.view_name