0
有问题我有表call_detail
与以下列phone_no
,call_id
,call_date
。我想创建一个视图,每行都有一个视图,以及每个记录上的前一个调用。我怎样才能做到这一点?在使用Oracle秩函数
我已经尝试使用排名与自我加入表call_detail
,但只给了我从表中的最新记录。
有问题我有表call_detail
与以下列phone_no
,call_id
,call_date
。我想创建一个视图,每行都有一个视图,以及每个记录上的前一个调用。我怎样才能做到这一点?在使用Oracle秩函数
我已经尝试使用排名与自我加入表call_detail
,但只给了我从表中的最新记录。
我不确定你在做什么lag()
但它听起来不对。听起来好像你在做什么; from the documentation:
LAG
是一个分析函数。它可以同时访问多个表中的一行,而无需自行加入。
您希望以前拨打每个电话号码,因此您需要按phone_no
进行分区,并按call_date
进行排序。这显示了所有三个字段的前值:
select phone_no, call_id, call_date,
lag(phone_no) over (partition by phone_no order by call_date)
as prev_phone_no,
lag(call_id) over (partition by phone_no order by call_date)
as prev_call_id,
lag(call_date) over (partition by phone_no order by call_date)
as prev_call_date
from call_detail
order by call_date;
与你评论给了样本数据这给:
PHONE_NO CALL_ID CALL_DATE PREV_PHONE_NO PREV_CALL_ID PREV_CALL_DATE
-------------- ---------- ------------------- -------------- ------------ -------------------
234534534 4 2013-01-11 20:11:03
234534534 6 2013-01-11 20:11:03 234534534 4 2013-01-11 20:11:03
234556777 2 2013-01-11 20:11:03
234543453 7 2013-01-12 15:11:03
234543453 5 2013-01-12 16:11:03 234543453 7 2013-01-12 15:11:03
234543453 3 2013-01-12 18:11:03 234543453 5 2013-01-12 16:11:03
234543453 1 2013-01-12 20:11:03 234543453 3 2013-01-12 18:11:03
,你可以用它来创建一个视图(没有order by
子句,只有你想要的列)。
使用LAG分析功能。 – San
LAG不会在这里工作,因为它会给我以前确切的日期输入,而不考虑电话号码。 – user3178723
LAG不会在这里工作,因为它会给我确切的以前的日期输入,而不考虑电话号码。 phone_no call_id call_date 234543453 1 1-12-2013 8:11:03 PM 234556777 2 1-11-2013 8:11:03 PM 234543453 3 1-12-2013 6:11:03 PM 234534534 4 1- 11-2013 8:11:03 PM 234543453 5 1-12-2013 4:11:03 PM 234534534 6 1-11-2013 8:11:03 PM 234543453 7 1-12-2013 3:11:03 PM 现在,如果我想获得电话号码的前一个电话号码,并且当前的电话ID也将LAG工作在这里 – user3178723