[目的]
我们想知道一个事件" A"在时间之前出现" X"。更具体地说,考虑到下面的数据集,我们想要找出先前购买的数量。
[背景]
DMBS:MySQL 5.6
我们有以下数据集:
user | date
1 | 2015-06-01 17:00:00
2 | 2015-06-02 18:00:00
1 | 2015-06-03 19:00:00
[所需输出]
user | date | purchase count
1 | 2015-06-01 17:00:00 | 1
2 | 2015-06-02 18:00:00 | 1
1 | 2015-06-03 19:00:00 | 2
[已经尝试过]
我们设法使用表本身的内部联接来获取特定日期的计数。
[问题(S)]
- 如何在单个查询中执行此操作?
答案 0 :(得分:1)
这可以使用用户定义的变量来完成,如前面的答案中已经提到的那样更快。
这需要根据某些顺序为每个组创建增量变量。从给定的数据集中user
和date
。
在这里你如何实现它
select
user,
date,
purchase_count
from (
select *,
@rn:= if(@prev_user=user,@rn+1,1) as purchase_count,
@prev_user:=user
from test,(select @rn:=0,@prev_user:=null)x
order by user,date
)x
order by date;
将表名test
更改为您的实际表名
答案 1 :(得分:0)
最有效的方法可能是使用变量:
select t.*,
(@rn := if(@u = user, @rn + 1,
if(@u := user, 1, 1)
)
) as purchase_count;
from table t cross join
(select @rn := 0, @u := '') params
order by user, date ;
您也可以使用相关子查询执行此操作,但这可能更快。