2017-07-27 20 views
0

我使用的查询:的Oracle SQL - 搜索结果限制为最大值

select 
    SGB_ID, 
    max(SGB_TERM_CODE_EFF)max_term, 
    SGB_TYP_CODE 
from SGB 
group by 
    SGB_ID, 
    SGB_TYP_CODE 
order by 1 

我越来越多行,为SGB_TYP_CODE有不同的值。我只想得到最大期限的结果。我试过使用'保持dense_rank',但我无法让它工作。

谢谢。

+0

请出示样本数据和预期昨日输出 – OldProgrammer

+0

固定。感谢您的输入。 – Lyndey

回答

1

这里是如何做到这一点与MAX()... KEEP():

SELECT sgb_id, 
     MAX (sgb_term_code_eff) max_term, 
     MAX (sgb_typ_code) 
      KEEP (DENSE_RANK FIRST 
        ORDER BY sgb_term_code_eff DESC) sgb_typ_code 
FROM sgb 
GROUP BY sgb_id 
ORDER BY 1 

完整的示例:

with sgb (sgb_id, sgb_term_code_eff, sgb_typ_code) AS 
(SELECT 1, 'A', 'ACODE' FROM DUAL UNION ALL 
    SELECT 1, 'B', 'BCODE' FROM DUAL UNION ALL 
    SELECT 1, 'Z', 'ZCODE' FROM DUAL UNION ALL 
    SELECT 1, 'D', 'DCODE' FROM DUAL UNION ALL 
    SELECT 2, 'A', 'ACODE' FROM DUAL UNION ALL 
    SELECT 2, 'Q', 'QCODE' FROM DUAL UNION ALL 
    SELECT 2, 'Q', 'QCODE' FROM DUAL UNION ALL 
    SELECT 3, 'A', 'ACODE' FROM DUAL) 
SELECT sgb_id, 
     MAX (sgb_term_code_eff) max_term, 
     MAX (sgb_typ_code) KEEP (DENSE_RANK FIRST ORDER BY sgb_term_code_eff DESC) sgb_typ_code 
FROM sgb 
GROUP BY sgb_id 
ORDER BY 1 

SGB_ID         MAX_TERM SGB_TYP_CODE 
-------------------------------------- -------- ------------ 
            1 Z  ZCODE 
            2 Q  QCODE 
            3 A  ACODE 
+0

解决!谢谢@matthewmcpeak – Lyndey