2011-12-22 109 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