我可以得到一个序列 - using rownum() OVER (order by <field>)
- 或者只是rownum
(见下文),但我正在努力获得一个特定的rownum/seq 和“前一个”两行。
该表是日期列表,并且每一天的日期对应于每月的日期 -但是不一定是当前月份。(由于是星期几,下个月的周四/周五仍可能“在”上个月的存储桶中)。
我的目标是将表连接到自身,获取今天的日期,然后获取相应的每月日期。我认为我遇到的问题是在外部查询的 WHERE 子句中,我不能做:
where rnum between (DDate is not NULL) and ((DDate is not NULL) -2)
或类似的事情。
简而言之 -
- 获取 DDate 不为空的 rownum(只有一行,因为它基于 SYSDATE)
- 从前两行获取 MDate 值(这是我的最终目标,两个月前的 MDate - 我需要的唯一值)
select t2.*
from (
select rownum rnum, t1.*
from (
select distinct to_char(r.MONTHLY, 'YYYY-MM-DD') as MDate,
to_char(l.DAILY, 'YYYY-MM-DD') as DDate
from Z_DATES l
right outer join Z_DATES r
on to_char(l.MONTHLY, 'YYYY-MM-DD') = to_char(r.MONTHLY, 'YYYY-MM-DD')
and to_char(l.DAILY, 'YYYY-MM-DD') = to_char(SYSDATE, 'YYYY-MM-DD')
order by 1
) t1
order by rnum
) t2
-- where DDate is not NULL
-- where rnum between 11 and 13
RNUM MDATE DDate
11 2013-04-29
12 2013-05-27
13 2013-07-01 2013-07-16