2015-09-03 48 views
0

我在下面的代碼中收到錯誤消息。我的目標是在指定日期後的三個月內計算符合標準的任何人。CASE 3個月後返回

, COUNT(DISTINCT case when instr(proc_concat,'297.7') and 
    (BetweenDate -3 months) then RECIPIENT end) AS TCOUNTH 

(BetweenDate -3個月)是棘手的部分。我在一個年度窗口內運行,而不是從getDate返回3個月(),我需要它從Y的-3個月內返回三個月。任何想法?謝謝。

修改:

CREATE TABLE MONTH3LOOK AS Select 
to_CHAR(DATE_OF_SERVICE_3013,'YYYY-MM') "Date" 

,COUNT(DISTINCT case when (regexp_instr(IS_CONCAT,'(2957|29570|29571|29572|29573|29574|29575|29576|29577|29578|29579)')>0) 
and 
(DATE_OF_SERVICE_3013 between trunc(DATE_OF_SERVICE_3013,'MM') and add_months(trunc(DATE_OF_SERVICE_3013,'MM'),-3)) 
then USER end) AS Recip 


FROM .NET_SERVICE 
WHERE DATE_OF_SERVICE_3013 BETWEEN 
TO_DATE('2013-10','YYYY-MM') AND 
TO_DATE('2014-03','YYYY-MM') 

group by to_CHAR(DATE_OF_SERVICE_3013,'YYYY-MM') 

是有一個更快的方式來查詢這個....我只是測試它,它需要約2小時。我想回答的是:計算3個月內具有IS_DIA的用戶從滾動的等級的X月到X-3月。謝謝。

+0

你忘了提及你得到的錯誤是什麼...另外,我建議你查看'months_between()'函數,這個函數似乎是你之後的函數(你會比較你的日期列與sysdate,大概)。或者可能在add_months(sysdate,-3)和sysdate'之間有'your_date_column'。 – Boneist

回答

0
COUNT(DISTINCT case when instr(proc_concat,'297.7') and 
DATE_COLUMN > add_months(sysdate, -3); then RECIPIENT end) AS TCOUNTH 

其中,date_column是您正在比較的字段。

+0

我可以只用Date_column ......給它可能是2年前我想伯爵只是外行:(被date_column三個月後) – Tinkinc

+0

我可以做 COUNT(DISTINCT情況下,當INSTR(proc_concat,「297.7」 )和 DATE_COLUMN> last_day(add_months(DATE_COLUMN,-90))然後是RECIPIENT結束)AS TCOUNTH – Tinkinc