【发布时间】:2013-08-31 15:11:54
【问题描述】:
我在使用分区实现 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,Direction 是 S,TrdTime 是 7/15/2013 6:18:00 PM。 此记录返回以下记录: 1240 和 1241 都具有相对侧“B”和现有记录 TrdTime > 这两个记录。 但是选择了 1241 的 TrdTime,因为它是按最近和最高的 TrdTime 排序的。
我怎样才能实现这个功能。
我正在考虑使用 LEAD 函数和分区。
我不能使用游标,因为表没有索引并且有超过 5 百万条记录。 我不想自己加入,因为这非常耗时。
请有任何建议。
【问题讨论】:
-
trdtime = 7/14/2013 6:12:00 PM的记录怎么会出现在trdtime = 7/14/2013 6:17:00的两条记录之间?根据ordered by nearest and highest TrdTime,trdtime = 7/14/2013 6:12:00 PM的记录不应该是最后一条吗?或者还有另一个你没有提到的排序规则? -
没有额外的订购。 trdtime = 7/14/2013 6:12:00 PM 的记录可以在最后出现。忽略顺序。
标签: oracle analytic-functions lead partition