シーケンスを取得できますusing rownum() OVER (order by <field>)
--または単にrownum
(以下を参照)、特定のrownum/seqと「前の」2行を取得するのに苦労しています。
テーブルは日付のリストであり、各日の日付は毎月の日付に対応していますが、必ずしも現在の月とは限りません。(曜日のため、翌月の木曜日/金曜日は、前月のバケットにまだ「入っている」可能性があります)。
私の目標は、テーブルをそれ自体に結合し、今日の日付を取得してから、対応する月次日付を取得することです。私が抱えていると思う問題は、outer-outer クエリの WHERE 句で、私ができないことです:
where rnum between (DDate is not NULL) and ((DDate is not NULL) -2)
またはそのようなこと。
要するに -
- DDate が null でない行番号を取得します (SYSDATE に基づいているため、行は 1 つだけです)。
- 前の 2 行から MDate 値を取得します (これが最終目標であり、2 か月前の 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