日期:2014-05-17  浏览次数:20828 次

求大神看一个功能给点思路
有个用户信息记录表
字段随便大家加 哪个主键 是否自动增长 是否非空 时间戳大家都可以自己设定
这个信息记录表 只要某用户在某天在网站有操作 就会插入该用户记录
现在想要一个功能 
查出一个月内连续10天登陆的用户 
100分不成敬意 先谢了
------解决方案--------------------
如果记录当前连续登录了多少天,可以在表里加个字段来记录,登录时进行判断,并更新
如果查询历史登录情况,只能通过登录流水表,两个方法:
1,将登录记录按用户和天分组以后,通过connect by,由上一天没有登录记录的行开始,最后过滤出深度大于10的
2,用存储过程,比较简单一些,性能可能也要更好。对每个用户,按登录时间排序,逐行判断
------解决方案--------------------
最简单的方法,设一个Varchar字段,长度为31,初始化为31个'0',如果某一天登录了,就把对应的字符改成'1' (譬如用户在10日登录了,就把字段中第10个字符改成1),然后查询的时候用like '%1111111111%'就可以了
------解决方案--------------------
引用:
大神快现身

对不起,才刚哪个没想清楚,计算差一步。。用下面这个sql.
with test as(
SELECT 'jack' ACCOUNT,sysdate LoginDate FROM dual union all
SELECT 'jack' ACCOUNT,sysdate+1 LoginDate FROM dual union all
SELECT 'jack' ACCOUNT,sysdate+2 LoginDate FROM dual union all
SELECT 'jack' ACCOUNT,sysdate+4 LoginDate FROM dual union all
SELECT 'jack' ACCOUNT,sysdate+5 LoginDate FROM dual union all
SELECT 'jack' ACCOUNT,sysdate+6 LoginDate FROM dual union all
SELECT 'jack' ACCOUNT,sysdate+7 LoginDate FROM dual union all
SELECT 'jack' ACCOUNT,sysdate+8 LoginDate FROM dual union all
SELECT 'jack' ACCOUNT,sysdate+9 LoginDate FROM dual union all
SELECT 'jack' ACCOUNT,sysdate+10 LoginDate FROM dual union all
SELECT 'jack' ACCOUNT,sysdate+11 LoginDate FROM dual union all
SELECT 'jack' ACCOUNT,sysdate+12 LoginDate FROM dual union all
SELECT 'jack' ACCOUNT,sysdate+13 LoginDate FROM dual union all
SELECT 'jack' ACCOUNT,sysdate+14 LoginDate FROM dual union all
SELECT 'tom' ACCOUNT,sysdate+1 LoginDate FROM dual union all
SELECT 'tom' ACCOUNT,sysdate+2 LoginDate FROM dual union all
SELECT 'tom' ACCOUNT,sysdate+4 LoginDate FROM dual union all
SELECT 'tom' ACCOUNT,sysdate+5 LoginDate FROM dual 

SELECT distinct ACCOUNT
  FROM (SELECT ACCOUNT,
               LoginDate,
               LoginDate - DENSE_RANK() OVER(PARTITION BY ACCOUNT ORDER BY LoginDate) FLAG
          FROM test)
 group by ACCOUNT, FLAG
having count(1) > 10