我想为每个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查询中的最大值?
您可以使用
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