已知访问时间,统计访问间隔时间差(精确到秒)连续相同的情况达到10次记录,用sql写出!

解决方案 »

  1.   

    这不算难吧,
    使用先排序,按照【访问IP】【访问时间】(假定字段)排序,
    然后使用分析函数【lag】求出上一条记录的【访问时间】差。
    然后再用分析函数【sum】求出相同特定条件的记录数量就好了,
    剩下的问题地球人知道怎么做了:)
      

  2.   

    顺便再来个问题,高手不要见笑了
       我想统计IP的C段(即192.168.212.*,前面三个是一样的),但是前面三个也不知道具体是什么,数据库中已有IP记录,现在想找到IP的C段相同超过1000条的记录?
      

  3.   

    select regexp_substr('201.201.83.2','^[[:digit:]]{1,3}[.][[:digit:]]{1,3}[.][[:digit:]]{1,3}') from dual;
    IP分组稍微麻烦点,上面的SQL可以取出C段前三个,如果你的数据未能按照满位存储就需要先转换一下,
    例如【192.1.23.91】-> 【192.001.023.091】这样的数据如果不转,你就不能有效处理。
      

  4.   

    Sorry,
    不好意思,那么你你能用查查函数了,查找做后一个[.]的位置,然后再截取了。
    上面的代码是的10g。
      

  5.   

    我自己搞出来了,供大家参考一下,
    select v.*,
                   count(substr(v.ip, 1, instr(v.ip, '.', -1))) over(partition by substr(v.ip, 1, instr(v.ip, '.', -1))) as ipc
              from visitor_info v
    解释一下,主要是这句了:substr(v.ip, 1, instr(v.ip, '.', -1)), 先从右到左找到每一个点的位置instr(v.ip, '.', -1),然后从左到右截就行了,呵呵,这个方法只对于IP才可以了.
    顺便谢谢ehuman,难得你这么热心,看好多问题都是你回答的,再次表示感谢!
      

  6.   

    有些东西如果OS层能辅助一下也不错,比如UNIX类的OS上的ORACLE应用,有些用SHELL结合oracle做很容易