我该如何使用滚动窗口?

时间:2016-08-11 13:57:42

标签: mysql

表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中编写查询?

2 个答案:

答案 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;