表t
send time user
2016-07-24 12:00:00 a
2016-07-24 01:00:00 b
2016-07-23 00:00:00 a
2016-07-22 00:00:00 a
2016-07-21 00:00:00 a
2016-07-20 00:00:00 a
2016-07-19 12:00:00 b
2016-07-18 11:00:00 c
在此表中,我想使用滚动窗口计算过去3天中唯一的活动用户。
7月24日,count(不同的用户)是2.而在7月23日,结果应该是1.
并于7月20日,结果应为3。
我想立刻得到历史结果。
如何在mysql中编写查询?
答案 0 :(得分:0)
create table t
( id int auto_increment primary key,
send_time datetime not null,
user varchar(100) not null
);
insert t (send_time,user) values
('2016-07-24 00:00:00', 'a'),
('2016-07-24 01:00:00', 'b'),
('2016-07-23 12:00:00', 'a'),
('2016-07-22 12:00:00', 'a'),
('2016-07-21 12:00:00', 'a'),
('2016-07-20 12:00:00', 'a'),
('2016-07-19 12:00:00', 'b'),
('2016-07-18 11:00:00', 'c');
查询:
select date(send_time),count(distinct user)
from t
group by date(send_time)
order by date(send_time) desc;
+-----------------+----------------------+
| date(send_time) | count(distinct user) |
+-----------------+----------------------+
| 2016-07-24 | 2 |
| 2016-07-23 | 1 |
| 2016-07-22 | 1 |
| 2016-07-21 | 1 |
| 2016-07-20 | 1 |
| 2016-07-19 | 1 |
| 2016-07-18 | 1 |
+-----------------+----------------------+
7 rows in set (0.00 sec)
如果需要在过去3天内滚动,请在结束时进行LIMIT 3
。
请花点时间为人们设置数据。帮助他人帮助你。图片不算数。
答案 1 :(得分:0)
使用Drew的模型,但使用正确的查询;-p
SELECT DATE(x.send_time) send_time
, COUNT(DISTINCT y.user) unique_users
FROM t x
JOIN t y ON DATE(y.send_time) BETWEEN DATE(x.send_time) - INTERVAL 3 DAY AND DATE(x.send_time)
GROUP
BY DATE(x.send_time)
ORDER
BY send_time DESC;