本帖最后由 limpid00 于 2016-6-2 14:17 编辑
数据是这样的原始表 T:
QQ图片20160602090140.png (12.69 KB, 下载次数: 3)
下载附件
2016-6-2 09:02 上传
callnum,用户电话号码,有重复来电
begin_time,用户拨打电话的开始时间,周期是一个月的
callid,用户拨打该通电话的标识(唯一)
现在的需求是,从用户首次拨打电话后的24小时内,一共的来电次数。
根据需求:
1、找出号码首次拨打的时间
create table T1 as
select callnum,min(begin_time)begin_time from T group by callnum,
2、create table T2 as
select * from T where exists (
select * from T1 where T.callnum=T1.callnum and T.begin_time between T1.begin_time and T1.begin_time+1);
3、select callnum,count(callid) from T2 group by callnum,
得出用户号码从第一次拨打开始的第一个24小时内的来电次数
我比较笨的方法就是,T3=select*from T minus select * from T2,
然后按照上面的方法继续一遍,得出第二个24小时内各号码的来电次数,
但总的周期是一个月,可能存在30遍,按此方法可以求出,但效率太慢,所以来此求教,怎么处理这个循环。
~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~
感谢论坛里的朋友无私帮助
后来我又想起另外一种方法来处理,就是增加一列:层级
就是先将表按时间条件分割成若干层级,
例如
第一层:第一次来电到24小时内的所有来电
第二层:除去第一个24小时内的所有来电,余下的首次来电到24小时内
....
依此类推,最后每一行都有标注层级。
那么,最后计算count,
就是select cj,callnum,count(callid) from T group by cj,callnum.得解!
|