2015-07-10 55 views
1

我有一個表格,其中有2列DATE和HOLIDAY_FLAG。從我的日曆表中選擇第10個工作日

DATE     HOLIDAY_FLAG 
01-JUL-2015 00.00.00 N 
02-JUL-2015 00.00.00 N 
03-JUL-2015 00.00.00 Y 
04-JUL-2015 00.00.00 Y 
05-JUL-2015 00.00.00 Y 
06-JUL-2015 00.00.00 N 
07-JUL-2015 00.00.00 N 
08-JUL-2015 00.00.00 N 
09-JUL-2015 00.00.00 N 
10-JUL-2015 00.00.00 N 
11-JUL-2015 00.00.00 Y 
12-JUL-2015 00.00.00 Y 
13-JUL-2015 00.00.00 N 
14-JUL-2015 00.00.00 N 

我想在where條件中提供所需日期並獲取下一個第5個工作日的日期。

Example: 
Input 01-JUL-2015 00.00.00 
Output 09-JUL-2015 00.00.00 

這是我迄今所做

select b.DATE + 5 
from CALENDAR b 
where b.DATE = '01-JUL-2015 00.00.00' 
and b.HOLIDAY_FLAG is not null; 

我知道這行不通

+0

可能的答案[這裏](http://stackoverflow.com/ a/18360812/4879022)使用功能 – Spidey

+0

一個[示例](http://stackoverflow.net m/a/8894702/4879022) – Spidey

+0

@Varan,PLZ測試下面提供的SQL,並讓我知道它的工作。 –

回答

1

的方法之一是使用分析功能lead()

SQLFiddle demo

select d5 
    from (
    select cal_date, lead(cal_date, 5) over (order by cal_date) d5 
     from calendar where holiday_flag='N') 
    where cal_date = date '2015-07-01' 
0

我認爲SQL下面會做的伎倆。你可以試着讓我知道嗎?

http://sqlfiddle.com/#!4/f600d/14/0

SELECT CAL_DATE 
    FROM (SELECT CA.CAL_DATE, ROWNUM AS RECNUM FROM CALENDAR CA WHERE HOLIDAY_FLAG = 'N') ABC, 
     (SELECT ROWNUM AS REQRECNUM 
      FROM CALENDAR 
     WHERE HOLIDAY_FLAG = 'N' 
      AND CAL_DATE = DATE '2015-07-01') BBC 
WHERE ABC.RECNUM = BBC.REQRECNUM + 5 
+0

工程就像一個魅力。向你的高級知識致敬。謝謝。但是我對使用rownum有限制,所以也許我必須找到另一種方法。 –

相關問題