2015-06-22 42 views
0

[目標]
我們想知道事件「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)]
- 如何做到這一點在單個查詢?

回答

1

這可以使用用戶定義的變量來完成,這個變量的速度已經在前面的答案中提到過了。 這需要根據某種順序爲每個組創建增量變量。並從給定的數據集userdate

在這裏你可以如何實現它

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您的實際表名

http://sqlfiddle.com/#!9/32232/12

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 ; 

您也可以與相關子查詢做到這一點,但是這可能更快。

相關問題