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/