如何根据report_tye_code列提取最高值

问题描述 投票:0回答:1

我想为每个report_type_code提取最高值行。我尝试过下面的sql查询。除此之外,我需要一个条件来提取每个report_type_code的最大值。

SELECT gfrb.report_type_code,
       gfrb.report_folder,
       Max (gfrb.object_version_number) "MAX"
FROM   gl_frc_reports_b gfrb
WHERE  gfrb.report_path LIKE '%REP514%'
GROUP  BY gfrb.report_type_code,
          gfrb.report_folder 

输出

报告类型代码 报告_文件夹 最大
分析 /共享/自定义/ 10
分析 /共享/自定义/交易 2
仪表板 /共享/自定义/交易 1
仪表板 /共享/自定义/交易 4
仪表板 /共享/自定义/交易 3

预期产出

报告类型代码 报告_文件夹 最大
分析 /共享/自定义/ 10
仪表板 /共享/自定义/交易 4

如何添加附加条件来提取上述sql查询中的最大值?

sql oracle
1个回答
0
投票

您可以使用

row_number
窗口函数来获取具有最高object_version_number的每个report_type_code行。

select report_type_code, report_folder, object_version_number
from
  (
  SELECT gfrb.report_type_code,
         gfrb.report_folder,
         gfrb.object_version_number,
         row_number() over (partition by gfrb.report_type_code
                            order by gfrb.object_version_number desc) rowno
  FROM   gl_frc_reports_b gfrb
) dt
where rowno = 1

如果您想包含联系,请使用

rank
代替:

select report_type_code, report_folder, object_version_number
from
  (
  SELECT gfrb.report_type_code,
         gfrb.report_folder,
         gfrb.object_version_number,
         rank() over (partition by gfrb.report_type_code
                      order by gfrb.object_version_number desc) rnk
  FROM   gl_frc_reports_b gfrb
) dt
where rnk = 1

在这里查看差异:https://dbfiddle.uk/f2l4lKce

© www.soinside.com 2019 - 2024. All rights reserved.