Mysql 确定表中日期范围的新唯一条目,其中项目可以多次出现
我有一个MySQL数据库InnoDB引擎,随着时间的推移,它跟踪用户对特定项目的访问: 表格格式: 同一用户的访问可以在该表中多次出现,并且该表可以很容易地包含数亿行,每个项目可以包含数千行 由于表是项和日期聚集的,因此查询图表的日期范围非常快,但我还想确定哪些用户第一次出现在日期范围内 我怎样才能有效地做到这一点 样本数据: 在项目1上选择自2000-01-03以来的新用户应返回:Mysql 确定表中日期范围的新唯一条目,其中项目可以多次出现,mysql,innodb,Mysql,Innodb,我有一个MySQL数据库InnoDB引擎,随着时间的推移,它跟踪用户对特定项目的访问: 表格格式: 同一用户的访问可以在该表中多次出现,并且该表可以很容易地包含数亿行,每个项目可以包含数千行 由于表是项和日期聚集的,因此查询图表的日期范围非常快,但我还想确定哪些用户第一次出现在日期范围内 我怎样才能有效地做到这一点 样本数据: 在项目1上选择自2000-01-03以来的新用户应返回: 假设用户是否出现在时间范围之外并不重要,我将使用以下查询: select user_id, co
假设用户是否出现在时间范围之外并不重要,我将使用以下查询:
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也很重要,那么将item_id='$item_id'添加到筛选子句中,因为groupby至少会选择MySQL中的第一个匹配项。这允许我确定用户第一次被看到的时间:
SELECT user_id, date
FROM user_track
WHERE item_id = 1
GROUP BY user_id
HAVING date >= '2000-01-03';
不幸的是,用户事件必须是项目的全局事件,而不是在特定的日期范围内。
3, 4
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;
SELECT user_id, date
FROM user_track
WHERE item_id = 1
GROUP BY user_id
HAVING date >= '2000-01-03';