日期:2014-05-18  浏览次数:20491 次

求一SQL语句,请高手指点,谢谢!
我有一张用户表,里面有UserID和用户访问公司网站的时间Createtime,同一个UserID可以对应多个Createtime,现在要想得到不风同用户的访问网站时间总和,即循环下一个时间减去前一个时间,得到总和,如果下一个时间减去前一个时间差大于20,则赋值为1,如果用户只访问了一次,也赋值为1.谢谢!

------解决方案--------------------
LZ最好给出测试环境,并把你要的结果贴出来,大家才能更懂你的意思
------解决方案--------------------
select userid,case when sum(col)=0 then 1 else sum(col) end from
(
select userid,col=case when datediff(minute,createtime,isnull((select top 1 createtime from t_User b where a.userid=b.userid and a.createtime <b.createtime order by createtime),createtime))> =20 then 1 else 0 end
from t_User a
)c
group by userid
------解决方案--------------------
解释一下 4 的 361怎么来的?
------解决方案--------------------
不明白第3个为什么是1
------解决方案--------------------
lz 求的是分钟还是秒啊, 1 的结果为 7 ,我怎么感觉算的是秒啊?

------解决方案--------------------

这个是按照秒算的
select a.UserID,
(case when sum(datediff(s,a.createtime ,b.createtime)) is null then 1
when sum(datediff(s,a.createtime ,b.createtime))> 20 then 1 else sum(datediff(s,a.createtime ,b.createtime)) end ) as CreateTime
from t_User a left outer join t_User b
on a.id+1=b.id and a.userid=b.userid
group by a.userid

--result
UserID CreateTime
1 7
2 1
3 1
4 1

如果要求分钟的话 把datediff(s,a.createtime ,b.createtime) 改成
datediff(mi,a.createtime ,b.createtime)

------解决方案--------------------
4的秒数应该为多少?
------解决方案--------------------
我来解释一下,4的秒数是302
求同一id相邻(不考虑其它id)的时间间隔之和,
如果间隔超过20分钟,认为间隔时间为1秒,若只有一条记录也为1秒

------解决方案--------------------
select a.UserID,
isnull(sum(case when datediff(s,a.createtime ,b.createtime)> 1200 then 1 else datediff(s,a.createtime ,b.createtime) end ),1)
as CreateTime
from t_User a left outer join t_User b
on a.id+1=b.id and a.userid=b.userid
group by a.userid
--result
1 7
2 1
3 1
4 302