各位高手大家好:目前我有一个客户开销户日志表,每月的开销户记录都在里面,开销户次数未知。我现在想查询每次开户对应的销户时间差是否超过72小时,我思路如下:1、根据号码排序日志表,把相同号码的归到一起2、根据相同号码分类开户,跟销户,分别按照时间排序开户,销户,并把结果放入2个数组3、用下标相同的销户数组减开户数据,发现时间差大于72小时,跳出但是我不会写这个sql,请各位帮忙手机号码字段    时间    开销户状态(1开户;0销户)
 msisdn         time           status
 

解决方案 »

  1.   

    --思路:使用分析函数lag取得前一个开户时间,diff就是相差的小时数
    SELECT msisdn, TIME, p_time, (TIME - p_time) * 24 diff
      FROM (SELECT msisdn,
                   TIME,
                   status lag(TIME) over(parition BY msisdn ORDER BY TIME) p_time,
              FROM table_name);
      

  2.   

    select t.usernumber,
           t.time,
           t.userstatus,
           lead(t.userstatus, 1, null) over(partition by t.usernumber order by t.userstatus)
      from USER_SERVICE_LOG t where t.usernumber=13019329470;
    结果:
    现在还需要把t.userstatus 中1的值再安装时间排序,3的也按照时间排序