2014-01-09 41 views
0

有问题我有表call_detail与以下列phone_no,call_id,call_date。我想创建一个视图,每行都有一个视图,以及每个记录上的前一个调用。我怎样才能做到这一点?在使用Oracle秩函数

我已经尝试使用排名与自我加入表call_detail,但只给了我从表中的最新记录。

+1

使用LAG分析功能。 – San

+0

LAG不会在这里工作,因为它会给我以前确切的日期输入,而不考虑电话号码。 – user3178723

+0

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

回答

1

我不确定你在做什么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 

SQL Fiddle

,你可以用它来创建一个视图(没有order by子句,只有你想要的列)。