2011-12-22 108 views
0
select * from 
      ( 
       select add_months(sysdate,-2)dt from dual 
       union 
       select add_months(sysdate,-1) from dual 
       union 
       select add_months(sysdate,2)from dual 
       union 
       select add_months(sysdate,3) from dual 
      ) 

Result甲骨文 - 最大年查詢錯誤

我想最小日期的最大年( 「22.02.2012 12:02:08」)
如何使這個?的select *

編輯

+1

使用'UNION ALL'不'UNION','UNION'是慢,因爲它明確地刪除重複。 – Benoit 2011-12-22 10:29:07

回答

2

您可以使用此一:

SELECT * FROM 
(
    SELECT add_months(sysdate,-2)dt from dual 
    UNION ALL 
    SELECT add_months(sysdate,-1) from dual 
    UNION ALL 
    SELECT add_months(sysdate,2)from dual 
    UNION ALL 
    SELECT add_months(sysdate,3) from dual 
    ORDER BY trunc(dt,'YEAR') DESC, trunc(dt,'MONTH') ASC 
) 
WHERE rownum = 1 
+0

+1',因爲我知道必須按照你的方式來制定查詢,但是我太懶惰了! – 2011-12-23 05:15:13

2

使用select max(dt)代替:重讀你的問題,你比較期望的輸出後,你 可能要最大的一年內的日期的最小日期。

在這種情況下,該語句將被

with dates as 
     ( 
      select add_months(sysdate,-2)dt from dual 
      union 
      select add_months(sysdate,-1) from dual 
      union 
      select add_months(sysdate,2)from dual 
      union 
      select add_months(sysdate,3) from dual 
     ) 
     select min(dt) from dates 
     where trunc(dt,'YYYY') = (select max(trunc(dt, 'YYYY')) from dates) 
0

不知道這是否是你在找什麼。這個問題對我來說不是很清楚。

SELECT MIN(dt) FROM 
(SELECT add_months(SYSDATE, -2) dt 
    FROM dual 
    UNION 
    SELECT add_months(SYSDATE, -1) 
     FROM dual 
    UNION 
    SELECT add_months(SYSDATE, 2) 
     FROM dual 
    UNION 
    SELECT add_months(SYSDATE, 3) FROM dual) 
WHERE trunc(dt, 'YYYY') > trunc(SYSDATE, 'YYYY'); 
+0

是的,我猜René的帖子是做你需要的。我一直忘記帶' – 2011-12-22 10:24:31