转自:http://www.tuicool.com/articles/uyEZJf
原文中相关说明很少,看起来很费劲,故在这里,我自己添加了些说明,完全是自己理解的,不知道对否,若有不对,欢迎批评指正,谢谢。
在网上看到一道有意思的题目,大意是如何在mysql查询连续在线的天数。
所谓的连续在线是指相邻两天都登录过,不一定一直在线,但是只要有过登录即可。
如,1月1日登录了一会下线了,一月2日登录了一会下线了,那么,就算1月1日和2日是连续在线,天数为2。
如果1月3日,没有登录过,1月4日登录了,此时,1月4日与1月1日、2日不算连续在线了。
设连续在线天数为days,则1月1日在线,days=1;1月2日在线,days=2;1月3日不在线,1月4日在线,days=1;1月5日在线,days=2;
首先建表,填充测试数据:
CREATE TABLE `tmysql_test_lianxu_3` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(11) DEFAULT NULL,
`sts` datetime DEFAULT NULL COMMENT '登录时间',
`ets` datetime DEFAULT NULL COMMENT '离线时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
测试数据为:
INSERT INTO `tmysql_test_lianxu_3` VALUES (1, 1, '2014-1-1 21:00:00', '2014-1-2 07:00:00');
INSERT INTO `tmysql_test_lianxu_3` VALUES (2, 1, '2014-1-2 15:37:57', '2014-1-2 21:00:00');
INSERT INTO `tmysql_test_lianxu_3` VALUES (3, 2, '2014-1-1 09:00:00', '2014-1-1 15:00:00');