数据
求连续登陆的天数
CREATE TABLE `t_login` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`login_date` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
INSERT INTO `blog`.`t_login` (`id`, `name`, `login_date`) VALUES ('1', '丁D', '2020-05-27');
INSERT INTO `blog`.`t_login` (`id`, `name`, `login_date`) VALUES ('2', '丁D', '2020-05-26');
INSERT INTO `blog`.`t_login` (`id`, `name`, `login_date`) VALUES ('3', '丁D', '2020-05-25');
INSERT INTO `blog`.`t_login` (`id`, `name`, `login_date`) VALUES ('4', '丁D', '2020-05-15');
INSERT INTO `blog`.`t_login` (`id`, `name`, `login_date`) VALUES ('5', '丁D', '2020-05-27');
INSERT INTO `blog`.`t_login` (`id`, `name`, `login_date`) VALUES ('6', '丁D', '2020-05-16');
INSERT INTO `blog`.`t_login` (`id`, `name`, `login_date`) VALUES ('7', '丁D', '2020-05-26');
INSERT INTO `blog`.`t_login` (`id`, `name`, `login_date`) VALUES ('8', '丁D1', '2020-05-26');
INSERT INTO `blog`.`t_login` (`id`, `name`, `login_date`) VALUES ('9', '丁D1', '2020-05-26');
INSERT INTO `blog`.`t_login` (`id`, `name`, `login_date`) VALUES ('10', '丁D2', '2020-05-27');
SELECT
t1. NAME ,@cont_day := (
CASE
WHEN @last_uid = t1. NAME
AND DATEDIFF(t1.login_date, @last_ot) = 1 THEN
(@cont_day + 1)
WHEN @last_uid = t1. NAME
AND DATEDIFF(t1.login_date, @last_ot) < 1 THEN
(@cont_day + 0)
ELSE
1
END
) AS days,
@last_uid := t1. NAME,
@last_ot := t1.login_date,
t1.login_date
FROM
(
SELECT
*
FROM
t_login
ORDER BY
NAME,
login_date
) t1,
(
SELECT
@last_uid := '',
@last_ot := '',
@cont_day := 0
) AS t2