Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 确定表中日期范围的新唯一条目,其中项目可以多次出现_Mysql_Innodb - Fatal编程技术网

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

Mysql 确定表中日期范围的新唯一条目,其中项目可以多次出现,mysql,innodb,Mysql,Innodb,我有一个MySQL数据库InnoDB引擎,随着时间的推移,它跟踪用户对特定项目的访问: 表格格式: 同一用户的访问可以在该表中多次出现,并且该表可以很容易地包含数亿行,每个项目可以包含数千行 由于表是项和日期聚集的,因此查询图表的日期范围非常快,但我还想确定哪些用户第一次出现在日期范围内 我怎样才能有效地做到这一点 样本数据: 在项目1上选择自2000-01-03以来的新用户应返回: 假设用户是否出现在时间范围之外并不重要,我将使用以下查询: select user_id, co

我有一个MySQL数据库InnoDB引擎,随着时间的推移,它跟踪用户对特定项目的访问:

表格格式:

同一用户的访问可以在该表中多次出现,并且该表可以很容易地包含数亿行,每个项目可以包含数千行

由于表是项和日期聚集的,因此查询图表的日期范围非常快,但我还想确定哪些用户第一次出现在日期范围内

我怎样才能有效地做到这一点

样本数据:

在项目1上选择自2000-01-03以来的新用户应返回:


假设用户是否出现在时间范围之外并不重要,我将使用以下查询:

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';