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