各位大拿,如题统计截止当天只出现两次的用户ID 同一天出现两次只算一次,查询结果如下
日期 人数
2017-03-20 0
2017-03-21 1
2017-03-22 2
注解:如下表当统计20号时,没有两次出现的uid 所以为0
当统计21号的人数时,过去出现过一次的只有uid为10这一人,这一天出现两次uid10 只算一次
日期 人数
2017-03-20 0
2017-03-21 1
2017-03-22 2
注解:如下表当统计20号时,没有两次出现的uid 所以为0
当统计21号的人数时,过去出现过一次的只有uid为10这一人,这一天出现两次uid10 只算一次
CREATE TABLE `recharge` ( `id` int(11) NOT NULL AUTO_INCREMENT, `uid` int(11) DEFAULT NULL, `dt` date DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; -- -- -- Records of recharge -- -- INSERT INTO `recharge` VALUES ("1", "10", "2017-03-20"); INSERT INTO `recharge` VALUES ("2", "11", "2017-03-20"); INSERT INTO `recharge` VALUES ("3", "10", "2017-03-21"); INSERT INTO `recharge` VALUES ("12", "10", "2017-03-21"); INSERT INTO `recharge` VALUES ("4", "12", "2017-03-21"); INSERT INTO `recharge` VALUES ("10", "13", "2017-03-21"); INSERT INTO `recharge` VALUES ("11", "14", "2017-03-21"); INSERT INTO `recharge` VALUES ("9", "15", "2017-03-21"); INSERT INTO `recharge` VALUES ("5", "10", "2017-03-22"); INSERT INTO `recharge` VALUES ("6", "14", "2017-03-22"); INSERT INTO `recharge` VALUES ("7", "15", "2017-03-22"); INSERT INTO `recharge` VALUES ("8", "11", "2017-03-22");
解决方案
200
22号的,测试数据的结果应该是0吧?
SELECT t1.dt, (select COUNT(1) as 人数 from ( select uid,dt,COUNT(DISTINCT id) as 人数 from recharge GROUP BY uid,dt )t where t.人数 = 2 and t.dt = t1.dt)as 人数 FROM (SELECT DISTINCT dt from recharge)t1