当列值不存在时,选择最大列值?

时间:2015-06-07 04:55:11

标签: sql oracle

我有一张表格,下面有以下数据。如果表格中不存在我的sql中的where子句,我正在努力使用sql来选择具有max fiscal_period和fiscal_year的行。

所以换句话说,如果我尝试选择尚不存在的会计年度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);  

1 个答案:

答案 0 :(得分:3)

在查询中使用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)