2014-02-26 24 views
0

我有一個MySQL數據庫(InnoDB引擎),它隨着時間的推移,跟蹤到一個特定項目的用戶的訪問:確定表日期範圍內新的唯一項目,其中一個項目可以出現多次

表格式

(pk) item_id: bigint 
(pk) date: date 
    user_id: bigint 

訪問同一用戶可以在此表中多次出現,並且該表可以很容易地有(幾千每件)數億行。

由於表格是項目和日期的聚集,所以查詢圖表日期範圍非常快,但我還想確定哪些用戶第一次出現在日期範圍中的哪個用戶是

我怎麼能這樣做有效地?

的樣本數據

item_id | date  | user_id 
--------------------------------- 
1  | 2000-01-01 | 2 
1  | 2000-01-02 | 1 
1  | 2000-01-03 | 3 
1  | 2000-01-04 | 4 
1  | 2000-01-05 | 1 
1  | 2000-01-06 | 3 

在項目選擇新用戶,因爲2000-01-03 應該返回

3, 4 

回答

0

This seems to work作爲GROUP BY選擇第一次出現(在MySQL至少)。這允許我確定第一次看到用戶:

SELECT user_id, date 
FROM user_track 
WHERE item_id = 1 
GROUP BY user_id 
HAVING date >= '2000-01-03'; 
0

的假設是否用戶已經出現在時間範圍之外不是一個問題,我會用下面的查詢:

select 
    user_id, 
    count(user_id) as visit_count 
from 
    cn_order where date between "$start_timerange" and "$end_timerange" 
group by 
     user_id having(visit_count) < 2; 

,如果項目也是重要的,增加 「和ITEM_ID = '$ ITEM_ID'」 到過濾子句

+0

不幸的是,用戶發生的事件必須是該項目的全局,而不是在特定的日期範圍內。 – Ryall

相關問題