パーティションを使用して LEAD/LAG を実装する際に問題が発生しました。
以下は例と予想される結果です
create table trd(
key number,
book number,
prd_key number,
direction varchar2(2),
trdtime date,
price number)
insert into trd values(1234,115,133864,'B','17-07-2013 18:18:00',108.859);
insert into trd values(1235,115,133864,'S','17-07-2013 18:18:00',108.859);
insert into trd values(1245,115,133864,'S','17-07-2013 18:18:00',108.859);
insert into trd values(1236,115,133864,'B','15-07-2013 18:18:00',108.872);
insert into trd values(1237,115,133864,'S','15-07-2013 18:18:00',108.866);
insert into trd values(1247,115,133864,'S','15-07-2013 18:18:00',108.866);
insert into trd values(1238,115,133864,'S','14-07-2013 18:18:00',107.86);
insert into trd values(1239,115,133864,'S','14-07-2013 18:17:00',108.86);
insert into trd values(1240,115,133864,'B','14-07-2013 18:12:00',109.86);
insert into trd values(1241,115,133864,'B','14-07-2013 18:17:00',110.86);
次のような値を返す必要があります。
Key Book Prd_Key Dir TrdTime Price NextPrice
1234 115 133864 B 7/17/2013 6:18:00 PM 108.859 108.866
1235 115 133864 S 7/17/2013 6:18:00 PM 108.859 108.872
1245 115 133864 S 7/17/2013 6:18:00 PM 108.859 108.872
1236 115 133864 B 7/15/2013 6:18:00 PM 108.872 108.86
1237 115 133864 S 7/15/2013 6:18:00 PM 108.866 110.86
1247 115 133864 S 7/15/2013 6:18:00 PM 108.866 110.86
1238 115 133864 S 7/14/2013 6:18:00 PM 107.86 110.86
1239 115 133864 S 7/14/2013 6:17:00 PM 108.86 109.86
1240 115 133864 B 7/14/2013 6:12:00 PM 109.86 NULL
1241 115 133864 B 7/14/2013 6:17:00 PM 110.86 NULL
埋め込むロジックは次のとおりです。
各レコードについて、反対方向と既存の TrdTime > その他のレコード TrdTime を取得する必要があります。例: キー 1237 の場合、方向は S で、TrdTime は 7/15/2013 6:18:00 PM です。このレコードに対して次のレコードが返されます: 1240 と 1241 の両方が反対側 'B' を持ち、既存のレコード TrdTime > これら 2 つのレコード。ただし、TrdTime が最も近くて最も高い順に並べられているため、1241 の TrdTime が選択されます。
この機能を実装するにはどうすればよいですか。
LEAD関数とパーティションを使ってやろうと思っていました。
テーブルがインデックス化されておらず、5 ミルを超えるレコードがあるため、カーソルを使用できません。非常に時間がかかるため、自己参加もしたくありません。
任意の提案をお願いします。