【问题标题】:Select 10th working day from my calendar table从我的日历表中选择第 10 个工作日
【发布时间】:2015-09-28 20:15:01
【问题描述】:

我有一个表,其中有 2 列 DATE 和 HOLIDAY_FLAG。

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 条件下提供所需的日期并获取下一个工作日的日期。

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;

我知道这行不通

【问题讨论】:

  • 使用函数的可能答案here
  • 再来一个example
  • @Varan,请测试下面提供的 sql 并告诉我它是否有效。

标签: oracle date select calendar


【解决方案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'

【讨论】:

    【解决方案2】:

    我认为下面的 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
    

    【讨论】:

    • 像魅力一样工作。向您卓越的知识致敬。谢谢。但是我对使用 rownum 有限制,所以也许我必须找到另一种方法。
    猜你喜欢
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多