ORACLE SQL-事件间隔时间?

ORACLE SQL-事件间隔时间?,sql,database,oracle,Sql,Database,Oracle,我遇到了这样一个问题: 从今天到圣诞节有几个月 SQL> SELECT MONTHS_BETWEEN (TO_DATE('2013/10/14', 'YYYY/MM/DD'), 2 TO_DATE('2013/12/25', 'YYYY/MM/DD')) AS MONTHS_BETWEEN FROM DUAL; MONTHS_BETWEEN -------------- -2.3548387 现在我有一个问题: “旗帜足球赛”和“客座演讲者”之间的时间间隔是多少个月 我无

我遇到了这样一个问题:

从今天到圣诞节有几个月

SQL> SELECT MONTHS_BETWEEN (TO_DATE('2013/10/14', 'YYYY/MM/DD'),
  2  TO_DATE('2013/12/25', 'YYYY/MM/DD')) AS MONTHS_BETWEEN FROM DUAL;

MONTHS_BETWEEN
--------------
    -2.3548387
现在我有一个问题:

“旗帜足球赛”和“客座演讲者”之间的时间间隔是多少个月

我无法弄清楚的问题是,相关日期在同一列中(1个是旗帜足球,2个是客座演讲者)。此外,它们来自一个表,而不是像“dual”这样的非实体

也许有一种方法可以在selection语句中嵌套一个WHERE子句,例如:

Select TO_CHAR(EVENT_DATE(WHERE EVENT_NAME = UPPER(‘Flag FOOtball Game’) 
– TO_CHAR(EVENT_DATE(WHERE EVENT_NAME = UPPER(‘GUEST SPEAKER’)AS 
TIME FROM FOOTBALL_TO_SPEAKER;
以下是事件表:

SQL> select * from event;

  EVENT_ID   CLASS_ID EVENT_NAME                     EVENT_DAT T RAIN_DATE
---------- ---------- ------------------------------ --------- - ---------
         1          9 ASTRO Physics STAR GAZING      09-NOV-99 O
         2         10 Flag FOOtball Game             19-JAN-99 O 20-JAN-99
         3          1 Guest SPEAKER                  01-DEC-99 I
         4          8 Barney ViDeo                   01-SEP-99 I
         5         10 PICKUP SOCCER GAME             09-JUL-99 I 10-JUL-99
         6          2 Guest Speaker                  20-NOV-99 I

我需要做什么?

只需将此表本身与所需的条件连接起来,例如:

SELECT t1.EVENT_DAT - t2.EVENT_DAT FROM EVENT t1, EVENT t2
WHERE t1.EVENT_NAME = 'Flag FOOtball Game' AND t2.EVENT_NAME = 'Guest Speaker'
有个办法

select months_between(
            max(case when event_name = 'Flag FOOtball Game'
                      then event_dat
                end),
            max(case when event_name = 'Guest Speaker'
                      then event_dat
                end)
  )
from event
where event_name in ('Flag FOOtball Game','Guest Speaker');

对于第一部分,以下内容应该是正确的

SELECT trunc(MONTHS_BETWEEN (TO_DATE('2013/10/14', 'YYYY/MM/DD'), TO_DATE('2013/12/25', 'YYYY/MM/DD')) )AS MONTHS_BETWEEN FROM DUAL;


select trunc(MONTHS_BETWEEN(fg,gs)) as "difference in month"
from
(
select 
                 max(case when event_name = 'Flag FOOtball Game'
                     then event_dat
                 end) as FG,
                 max(case when event_name = 'Guest Speaker'
                           then event_dat
                 end)  as GS
from event
where event_name in ('Flag FOOtball Game','Guest Speaker')   
) 
;

我在这里一直遇到一个错误:第1行错误:ORA-00909:参数数无效第6行错误:ORA-00904:“事件\ U日期”:无效标识根据表中的名称更改列名。在您的表中,它是EVENT_DAT