确定表中日期范围的新唯一条目,其中项可以多次出现

时间:2014-02-26 00:08:44

标签: mysql innodb

我有一个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

2 个答案:

答案 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 workGROUP BY选择第一次出现(至少在MySQL中)。这允许我确定第一次看到用户:

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