我的表格call_detail
包含以下列phone_no
,call_id
,call_date
。我想创建一个视图,其中包含每一行和每条记录的上一次调用。我怎样才能做到这一点?
我尝试在表call_detail
上使用自我加入排名,但这只给出了表格中的最新记录。
答案 0 :(得分: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
您可以使用它来创建视图(没有order by
子句,并且只使用您想要的列。)