【问题标题】:Select max column value when column value does not exist?当列值不存在时选择最大列值?
【发布时间】:2015-06-07 13:29:26
【问题描述】:

我有一个包含以下数据的表格。如果我的 sql 中的 where 子句在表中不存在,我正在努力使用 sql 来选择具有最大财政周期和财政年的行。

因此,换句话说,如果我尝试选择尚不存在的财政年度 8,我的查询应该检索具有确实存在的最大期间和年份的行。任何人都可以帮助我提供可以提供该答案的查询吗?

这是我迄今为止尝试过的。

    SELECT   
 nvl(FISCAL_PERIOD,max(FISCAL_PERIOD)),nvl(FISCAL_year,max(FISCAL_year)),amount  
        FROM MAXTABLE   
        where fiscal_period = 5  
        group by FISCAL_PERIOD,FISCAL_year, amount;


CREATE TABLE MAXTABLE  
   (    "FISCAL_PERIOD" NUMBER,  
         "FISCAL_YEAR" NUMBER,  
         "AMOUNT" NUMBER  
   ) 


 Insert into MAXTABLE (FISCAL_PERIOD,FISCAL_YEAR,AMOUNT) values (1,9,50);  
    Insert into MAXTABLE (FISCAL_PERIOD,FISCAL_YEAR,AMOUNT) values (2,5,50);  
    Insert into MAXTABLE (FISCAL_PERIOD,FISCAL_YEAR,AMOUNT) values (3,6,50);  

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    在查询中使用union all 以获取最大年份的数据,并为目标年份附加not exists 条件,因此不能返回联合的两半:

    SELECT FISCAL_PERIOD, FISCAL_year, amount  
    FROM MAXTABLE   
    where fiscal_period = 5  
    union all
    SELECT FISCAL_PERIOD, FISCAL_year, amount  
    FROM MAXTABLE 
    where fiscal_period = (select max(fiscal_period) from MAXTABLE)
    and not exists (select * from MAXTABLE where fiscal_period = 5)
    

    【讨论】:

    • 波西米亚人,你绝对是个天才。感谢你的回答!您安装了一个小错字,我确定您的意思是“金额”。感谢您的及时回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 2022-06-23
    相关资源
    最近更新 更多