我正在尝试选择此表中的所有值,按view_name
分组,版本最高
所以我想选择core_id
1234和1236
SELECT
MAX(version),
view_name
FROM csa_help_admin cha
GROUP BY view_name
以上选项会获取我想要的行,但由于汇总了我无法获得core_id
和help_active
值
我意识到group by是一个聚合函数,但是有人建议如何获得所需的结果
我正在使用pl sql
答案 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