2014-01-09 32 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子句,只有你想要的列)。