mysql calculates the number of consecutive days, mysql consecutive login days, statistics of consecutive days

mysql calculates the number of consecutive days, mysql consecutive login days, statistics of consecutive days

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Sweet Potato YaoNovember 28, 2016 09:29:10 Monday

http://fanshuyao.iteye.com/

 

MySQL calculates the number of consecutive days, the number of consecutive login days in mysql, and the statistics of consecutive days:

http://fanshuyao.iteye.com/blog/2341455

 

Oracle calculates the number of consecutive days, calculates the number of consecutive days, Oracle statistics of consecutive days

http://fanshuyao.iteye.com/blog/2341163

 

1. Table structure and initialization data

DROP TABLE user_login;

CREATE TABLE user_login(
	pid INT NOT NULL,
	login_time DATETIME NOT NULL
);

INSERT INTO user_login(pid, login_time) VALUES(1,'2016-11-25 13:30:45');
INSERT INTO user_login(pid, login_time) VALUES(1,'2016-11-24 13:30:45');
INSERT INTO user_login(pid, login_time) VALUES(1,'2016-11-24 10:30:45');
INSERT INTO user_login(pid, login_time) VALUES(1,'2016-11-24 09:30:45');
INSERT INTO user_login(pid, login_time) VALUES(1,'2016-11-23 09:30:45');
INSERT INTO user_login(pid, login_time) VALUES(1,'2016-11-10 09:30:45');
INSERT INTO user_login(pid, login_time) VALUES(1,'2016-11-09 09:30:45');
INSERT INTO user_login(pid, login_time) VALUES(1,'2016-11-01 09:30:45');
INSERT INTO user_login(pid, login_time) VALUES(1,'2016-10-31 09:30:45');


INSERT INTO user_login(pid, login_time) VALUES(2,'2016-11-25 13:30:45');
INSERT INTO user_login(pid, login_time) VALUES(2,'2016-11-24 13:30:45');
INSERT INTO user_login(pid, login_time) VALUES(2,'2016-11-23 10:30:45');
INSERT INTO user_login(pid, login_time) VALUES(2,'2016-11-22 09:30:45');
INSERT INTO user_login(pid, login_time) VALUES(2,'2016-11-21 09:30:45');
INSERT INTO user_login(pid, login_time) VALUES(2,'2016-11-20 09:30:45');
INSERT INTO user_login(pid, login_time) VALUES(2,'2016-11-19 09:30:45');
INSERT INTO user_login(pid, login_time) VALUES(2,'2016-11-02 09:30:45');
INSERT INTO user_login(pid, login_time) VALUES(2,'2016-11-01 09:30:45');
INSERT INTO user_login(pid, login_time) VALUES(2,'2016-10-31 09:30:45');
INSERT INTO user_login(pid, login_time) VALUES(2,'2016-10-30 09:30:45');
INSERT INTO user_login(pid, login_time) VALUES(2,'2016-10-29 09:30:45');

 

2. The method of encapsulating the calculation of consecutive days

DELIMITER $$

CREATE
    FUNCTION f_continuty_days(id INT, start_time DATE, end_time DATE)
    RETURNS INT
    BEGIN
	DECLARE days INT;
	DECLARE flag INT;
	DECLARE previous_day DATE;
	SET days := 0;
	SET flag := 1;
	SET previous_day := DATE_SUB(end_time,INTERVAL 1 DAY);
	
	WHILE flag>0 DO
		SELECT COUNT(DISTINCT(DATE(login_time))) INTO flag  FROM  user_login
		WHERE pid = id
		AND DATE(login_time) = previous_day ;
		IF flag > 0 THEN
			SET days := days + 1;
			SET previous_day := DATE_SUB(previous_day,INTERVAL 1 DAY);
		END IF;
	END WHILE;
	RETURN days;
    END$$

DELIMITER ;

 

 

3. Calling method

Pass in the user pid, start time, and end time parameters.

SELECT f_continuty_days(1,DATE('2016-10-01'),DATE('2016-11-25'));

 

 

 

 

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Sweet Potato YaoNovember 28, 2016 09:29:10 Monday

http://fanshuyao.iteye.com/

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326568529&siteId=291194637