如何写关于MySQL的查询,将计算用户有多少天连续通过这次访问应用

问题描述:

我有表所示:如何写关于MySQL的查询,将计算用户有多少天连续通过这次访问应用

CREATE TABLE Activity (LoginDate DATE, ID int);        

INSERT INTO Activity VALUES 
    ("2016-10-01", 2), ("2016-10-01", 1), ("2016-10-02", 1), ("2016-10-02", 3), 
    ("2016-10-03", 1), ("2016-10-03", 3), ("2016-10-04", 2), ("2016-10-05", 1); 

,需要收到这样的事情: table

<table><tbody><tr><th>Date</th><th>UserID</th><th>Days in Row</th></tr><tr><td>2016-10-01</td><td>2</td><td>0</td></tr><tr><td>2016-10-01</td><td>1</td><td>0</td></tr><tr><td>2016-10-02</td><td>1</td><td>1</td></tr><tr><td>2016-10-02</td><td>3</td><td>0</td></tr><tr><td>2016-10-03</td><td>1</td><td>2</td></tr><tr><td>2016-10-03</td><td>3</td><td>1</td></tr><tr><td>2016-10-04</td><td>2</td><td>0</td></tr><tr><td>2016-10-05</td><td>1</td><td>0</td></tr></tbody></table>

通过仅使用SQL或T-SQL,没有CTE。有任何想法吗?

+0

图片上传* *在这里。不要使用其他网站。我没有点击该链接。 (或者更好的是,不要在所有使用图像 - 复制/粘贴你的问题的身体想要的结果,并对其进行格式化。如果你需要一个好的表格格式,您可以使用此:https://开头OZH .github.io/ASCII码表/) – Siyual

+0

谢谢你,有它 – Kruzeyr0

+0

如果我理解你想要正确地做什么,你必须指定列,您希望将值插入到你的INSERT INTO声明。了解如何在这里使用的语句:https://www.w3schools.com/sql/sql_insert.asp –

我没有MySQL的,所以利用这种更因为只是伪代码。莫非这样的事情对你的工作?

CREATE PROCEDURE TrackConsecutiveVisits() 
    BEGIN 

    CREATE TABLE Activity_Results (LoginDate DATE, ID int, con_visits int); 

    DECLARE con_visit INTEGER DEFAULT 0; 

    DECLARE last_id INTEGER DEFAULT 0; 
    DECLARE last_date DATE DEFAULT "1900-01-01"; 
    DECLARE cur_id INTEGER DEFAULT 0; 
    DECLARE cur_date DATE DEFAULT "1900-01-01"; 

    DECLARE concur CURSOR FOR 
     SELECT ID, 
       LoginDate 
      FROM Activity 
      ORDER 
      BY id, 
       loginDate; 

    OPEN con_cursor; 

    con_loop: LOOP 
     FETCH concur INTO cur_id, cur_date; 

     IF last_id = cur_id AND last_date + 1 = cur_date THEN 
      SET con_visit = con_visit + 1 
     ELSE 
      SET con_visit = 0 
     END IF 

     INSERT INTO Activity_Results VALUES (cur_id, cur_date, con_visit) 

     SET last_id = cur_id; 
     SET last_date = cur_date; 

    END LOOP 

    CLOSE concur 

END;