我是這樣查詢用戶連續簽到次數的


  最近的一個項目中有一個統計用戶連續簽到指定天數的需求,要是單單統計最后一次連續簽到的次數也不是什么難事,偏偏需求是查詢出指定時間段連續簽到指定天數的用戶。

  

  本來一開始覺着也不是很難,但思考了一會之后發現,要判斷是否連續,用sql語句對我來說還是有不小的難度,於是乎開始google sql連續日期,也可能是本人不會搜索,找了半天沒有找到自己想要的,或者對我有幫助的代碼片段或者示例。

 

  就這樣白白浪費了一中午的時間,既然搜不到,那就自己想辦法。既然難點是判斷日期連續,我能不能這樣做呢,把指定的時間段,拆分成N多個指定天數且連續的時間小時間段呢?貌似這樣可行,說做就做,記錄用戶簽到的表結構是這樣的

 

 

  用戶每天僅能簽到一次(記錄一次),下面是查詢滿足條件的用戶sql代碼片段

  

 1 declare @BeginDate datetime,--開始時間段
 2         @EndDate datetime,--結束時間段
 3         @Days int;--連續天數
 4 
 5 set @BeginDate='2015-05-01';
 6 set @EndDate='2015-05-15';
 7 set @Days=3;
 8 
 9 DECLARE @LoopTimes INT=0;
10 SET @LoopTimes=DATEDIFF(DAY,@BeginDate,@EndDate)-@Days+1;
11 
12 IF OBJECT_ID('#TempUserSignin','U') IS NOT NULL
13     DROP TABLE #TempUserSignin;
14     
15 CREATE TABLE #TempUserSignin
16 (
17     UserID INT,
18     Counts INT
19 );
20 
21 WHILE (@LoopTimes>0)
22 BEGIN
23     
24     INSERT INTO #TempUserSignin(UserID,Counts)
25     SELECT UserID,COUNT(1) AS Counts 
26     FROM UserSigninLog WHERE LogTime BETWEEN @BeginDate AND DATEADD(DAY,@Days-1,@BeginDate)+'23:59:59.998' GROUP BY USERID;
27     
28     SET @BeginDate=DATEADD(DAY,1,@BeginDate)
29     SET @LoopTimes=@LoopTimes-1;
30 END
31 
32 SELECT MAX(Counts) AS Counts,UserID FROM #TempUserSignin WHERE Counts>=@Days GROUP BY UserID
33 DROP TABLE #TempUserSignin;

 

  下面是用戶簽到記錄表里面的測試數據

  

 

  上面sql的執行結果如下:

  

 

  我是低調的結尾,看到這就結束了哦


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM