【发布时间】:2013-07-17 01:31:35
【问题描述】:
我可以得到一个序列 - using rownum() OVER (order by <field>) - 或只是 rownum(见下文),但我正在努力获得一个特定 rownum/seq 和“前一个”两行。
该表是日期列表,并且每一天的日期对应于每月的日期 - 不一定 一定是当前月份。 (由于是星期几,下个月的周四/周五仍可能“在”上个月的存储桶中)。
我的目标是将表连接到自身,获取今天的日期,然后获取相应的每月日期。我认为我遇到的问题是在外部查询的 WHERE 子句中,我不能这样做:
where rnum between (DDate is not NULL) and ((DDate is not NULL) -2)
或类似的东西。
总之——
- 获取DDate不为null的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
【问题讨论】: