0

我有两张表,例子如下。

table_1
days        special_day
10/09/2013     Y
10/10/2013     N
10/11/2013     Y
10/12/2013     N
10/13/2013     N
10/14/2013     Y

table_2
id          special_day_ind      numdays         order
123            Y                    3              2
456            N                    5              1

我的查询必须根据 table_2 中的参数从 table_1 中选择 sysday 和正确日期之间的差异。如果 special_day_ind 是“Y”,那么我需要从 sysdate 返回 3 (numdays) 个 special_days。如果是“N”,则 numdays 就是答案。结果将是 ORDER(ed) BY order asc(ending)。

在上面的表格示例中,查询将返回。

系统日期 = 2013 年 10 月 14 日

 id     days 
456     5
123     5    (10/14/2013 - 10/9/2013)

似乎 ROWNUM 可以解决问题,但是使用不同的“计数方式”,我不确定如何进行。

4

1 回答 1

0

这是一种方法。

您需要为 table_1 中的特殊日子分配一个行号。

select days,
       row_number() over (order by days desc) r
  from table_1
 where special_day = 'Y';

将其用作 CTE,您可以找到较早的特殊日子并将其从 sysdate 中减去。

with x as(
  select days,
         row_number() over (order by days desc) r
    from table_1
   where special_day = 'Y'
  )
select id, 
       case when special_day_ind = 'N'
            then numdays
            when special_day_ind = 'Y'
            then trunc(sysdate) - (select days
                                     from x
                                    where r = numdays)
       end days
  from table_2
 order by order_;

演示

于 2013-10-15T05:27:18.557 回答