DECLARE @StartTime DATE = '2020-1-1',
@EndTime DATE = '2020-1-31'
--创建临时表
CREATE TABLE #log_table
(
log_date DATE,
uid INT
);
--插入测试数据
WHILE @StartTime <= @EndTime
BEGIN
INSERT INTO #log_table (log_date,uid)
VALUES (@StartTime,1);
if(@StartTime<'2020-1-8')
INSERT INTO #log_table (log_date,uid)
VALUES (@StartTime,2);
if(@StartTime<'2020-1-15')
INSERT INTO #log_table (log_date,uid)
VALUES (@StartTime,3);
if(@StartTime='2020-1-6')
INSERT INTO #log_table (log_date,uid)
VALUES (@StartTime,4);
if(@StartTime='2020-1-7')
INSERT INTO #log_table (log_date,uid)
VALUES (@StartTime,4);
if(@StartTime='2020-1-12')
INSERT INTO #log_table (log_date,uid)
VALUES (@StartTime,4);
if(@StartTime='2020-1-16')
INSERT INTO #log_table (log_date,uid)
VALUES (@StartTime,4);
SET @StartTime = DATEADD(DAY, 1, @StartTime);
END;
--查询
Select uid,max(cnt) as cnt
From (Select uid,Grp_No,count(*) as cnt
From (
Select uid,log_date,(Day(log_date)-ROW_NUMBER() OVER (Partition By uid Order By uid,log_date)) as Grp_No
From #log_table
) a
Group By uid,Grp_No
) a
Group By uid
--删除临时表
DROP TABLE #log_table;