有 A表 如下:
  DATE            CREATE_DATE       UPDATE_DATE        
 2008/12/3 08:00:00    2008/12/3 12:00:00    2008/12/5 12:00:00 
 2008/12/3 08:00:00    2008/12/4 00:00:00    2008/12/3 12:00:00
 2008/12/3 08:00:00    2008/12/5 00:00:00    2008/12/6 12:00:00
 2008/12/3 08:00:00    2008/12/6 00:00:00    2008/12/5 12:00:00
 2008/12/3 08:00:00    2008/12/7 00:00:00    2008/12/4 12:00:00
 2008/12/3 08:00:00    2008/12/8 00:00:00    2008/12/10 12:00:00
 2008/12/4 08:00:00    2008/12/9 00:00:00    2008/12/6 12:00:00
 2008/12/4 08:00:00    2008/12/5 00:00:00    2008/12/8 12:00:00
 2008/12/4 08:00:00    2008/12/7 00:00:00    2008/12/5 12:00:00
 2008/12/4 08:00:00    2008/12/4 14:00:00    2008/12/7 12:00:00需得到的結果 一天  三天  五天;
如求一天:取(CREATE_DATE,UPDATE_DATE)日期較早的一個 與 DATE 時間差是一天的記錄 
   
 

解决方案 »

  1.   

    select * from a a1
    where exists ( select 1 from a a2 
                    where abs(a2.date-(case where a2.CREATE_DATE > a2.UPDATE_DATE then a2.UPDATE_DATE else a2.CREATE_DATE))=1
                    and a2.date = a1.date
                    and a2.CREATE_DATE = a1.CREATE_DATE
                    and a2.UPDATE_DATE = a1.UPDATE_DATE );
      

  2.   

    -- 差一天:
    select * from a a1
    where exists ( select 1 from a a2 
                    where abs(a2.date-(case where a2.CREATE_DATE > a2.UPDATE_DATE then a2.UPDATE_DATE else a2.CREATE_DATE))=1
                    and a2.date = a1.date
                    and a2.CREATE_DATE = a1.CREATE_DATE
                    and a2.UPDATE_DATE = a1.UPDATE_DATE );
      

  3.   

    -- 差一天:
    select * from a
    where abs(a.DATE-(case when a.CREATE_DATE > a.UPDATE_DATE then a.UPDATE_DATE else a.CREATE_DATE end ))=1;
      

  4.   

    --差一天,三天,五天
    SELECT *
      FROM (SELECT a.*,
                   abs(a.DATE -
                       decode(sign(a.CREATE_DATE - a.UPDATE_DATE), 1, a.UPDATE_DATE, a.CREATE_DATE)) diff
              FROM a)
     WHERE diff = 1 OR
           diff = 3 OR
           diff = 5;