如何写关于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。有任何想法吗?
答
我没有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;
图片上传* *在这里。不要使用其他网站。我没有点击该链接。 (或者更好的是,不要在所有使用图像 - 复制/粘贴你的问题的身体想要的结果,并对其进行格式化。如果你需要一个好的表格格式,您可以使用此:https://开头OZH .github.io/ASCII码表/) – Siyual
谢谢你,有它 – Kruzeyr0
如果我理解你想要正确地做什么,你必须指定列,您希望将值插入到你的INSERT INTO声明。了解如何在这里使用的语句:https://www.w3schools.com/sql/sql_insert.asp –