2 u012488416 u012488416 于 2016.03.29 09:21 提问

sql sever连续时间操作问题
sql

请教各位大神,问个问题,测试数据如下
create table #loginlog (username nchar(10),logindate datetime)
insert into #loginlog values('zhang','2016-03-1 00:01')
insert into #loginlog values('zhang','2016-03-2 14:21')
insert into #loginlog values('zhang','2016-03-3 16:30')
insert into #loginlog values('zhang','2016-03-4 00:01')
insert into #loginlog values('zhang','2016-03-4 03:01')
insert into #loginlog values('wang','2016-03-2 00:01')
insert into #loginlog values('li','2016-03-5 00:01')
insert into #loginlog values('zhang','2016-03-7 00:01')
insert into #loginlog values('li','2016-03-7 00:01')
insert into #loginlog values('peng','2016-03-8 00:01')
insert into #loginlog values('peng','2016-03-9 00:01')
insert into #loginlog values('zhang','2016-03-11 00:01')
insert into #loginlog values('zhang','2016-03-12 00:01')
insert into #loginlog values('zhang','2016-03-13 00:01')
insert into #loginlog values('wang','2016-03-14 00:01')
insert into #loginlog values('wang','2016-03-15 00:01')
insert into #loginlog values('wang','2016-03-16 00:01')
insert into #loginlog values('wang','2016-03-17 00:01')
insert into #loginlog values('li','2016-03-15 00:01')
insert into #loginlog values('li','2016-03-16 00:01')
insert into #loginlog values('li','2016-03-17 00:01')
需要找出一个月内三天时间内登陆大于等于2次的用户,希望大神不吝赐教

3个回答

zuoming120
zuoming120   2016.03.29 09:41
已采纳

sql就不写了,我直说我自己的想法,
查找一个月,这个范围太广你如果随便指定一个月,那就没办法做了,只能是指定一个月,然后从当月的第一天开始,每三天统计一次。因为你的统计肯定是连续的三天才可以,要不然一个月中随便的三天,我个人认为没有多大的意思了。所以可以理解为三天生成一次报表。统计以上三天中登陆过三天时间内登陆大于等于2次的用户,相当于三天统计一次零时报表,这个报表生成文件,当这个月到最后一天的时候再去统计这个月有多少个这样的零时文件,就是三天内登陆的用户。

danielinbiti
danielinbiti   Ds   Rxr 2016.03.29 10:14
 SELECT T1.*,(SELECT COUNT(*) FROM (
  SELECT USERNAME,DateName(year,dt) y,DATENAME(month,dt) m ,dt
,CONVERT(varchar(100),dt, 23) dt_time FROM (
SELECT username,CAST(logindate AS DATETIME) dt FROM loginlog2
) t 
) T WHERE T.USERNAME = T1.USERNAME AND T.Y = T1.Y AND T.M = T1.M
AND CONVERT(varchar(100),DATEADD(day,-2,dt),23)<=T1.dt_time 
AND CONVERT(varchar(100),DATEADD(day,2,dt),23)>=T1.dt_time 
) 登陆次数前后3天内
 FROM (
  SELECT USERNAME,DateName(year,dt) y,DATENAME(month,dt) m 
,CONVERT(varchar(100),dt, 23) dt_time FROM (
SELECT username,CAST(logindate AS DATETIME) dt FROM loginlog2
) t
) T1 order by username,y,m,dt_time
u012488416
u012488416 回复danielinbiti: 非常感谢![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/13.gif)
一年多之前 回复
CSDNXIAOD
CSDNXIAOD   2016.03.30 11:29

SQL Sever中对表的操作
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!