我有一个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
选择项目 1 上的 2000-01-03 后的新用户:
3, 4
答案 0 :(得分: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也很重要,请将“and item_id ='$ item_id'”添加到过滤条款
答案 1 :(得分: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';