我的目标是找到在过去7天内访问我网站的访问者中有多少人今天也访问过.这意味着如果有人访问过05-02,今天,它会计算在内05-02.
我的查询的问题是,如果有人访问过05-01,05-02而且今天也是如此05-01.但是我希望查询能够统计他05-02.
如何编辑下面的查询来执行此操作?
SELECT COUNT( DISTINCT v.`hash` ) hashCount, DATE( v.`timestamp` ) AS views
FROM audience v
INNER JOIN behaviour b ON v.`hash` = b.`hash`
WHERE v.timestamp
BETWEEN SUBDATE( CURDATE( ) , 7 )
AND CURDATE( )
AND DATE( b.timestamp ) = CURDATE( )
GROUP BY views
Run Code Online (Sandbox Code Playgroud)
为了方便起见,只需将所有访问过的人都记录下来,查找过去 7 天内的访问情况,如果找到,则返回最后一次访问的日期。我认为这种方法更容易理解:
select b.`hash` ,
audience.last_visit
from behaviour b
inner join (select v.`hash`, max(v.timestamp) as last_visit from audience v
where DATE(v.timestamp) between date_sub(current_date, interval 7 day) and
date_sub(current_date, interval 1 day)
group by v.`hash`) as audience
on(b.`hash` = audience.`hash`)
where DATE(b.timestamp) = CURDATE();
Run Code Online (Sandbox Code Playgroud)
- 我们加入一个已经包含我们需要的信息的选择(过去 7 天内每个哈希的最新访问)。
返回的行数是今天和上周访问您页面的访问者数量。
您还可以从您的选择中进行计数,以获取您要查找的数字作为查询结果:
select count(*) from
(select b.`hash` ,
audience.last_visit
from behaviour b
inner join (select v.`hash`, max(v.timestamp) as last_visit from audience v
where DATE(v.timestamp) between date_sub(current_date, interval 7 day) and
date_sub(current_date, interval 1 day)
group by v.`hash`) as audience
on(b.`hash` = audience.`hash`)
where DATE(b.timestamp) = CURDATE() ) as my_visitors;
Run Code Online (Sandbox Code Playgroud)
- 测试数据
drop table if exists your_schema.behaviour;
create table your_schema.behaviour(`hash` varchar(255), `timestamp` timestamp) ;
insert into your_schema.behaviour
values ('ab','2016-05-23'),('ac','2016-05-23');
drop table if exists your_schema.audience;
create table your_schema.audience (`hash` varchar(255), `timestamp` timestamp) ;
insert into your_schema.audience
values ('ab','2016-05-01'),('ab','2016-05-02'),('ab','2016-05-03'),('ab','2016-05-04'),('ab','2016-05-21'),('ab','2016-05-23'),
('ac','2016-05-01'),('ac','2016-05-02'),('ac','2016-05-03'),('ac','2016-05-04'),('ac','2016-05-21'),('ac','2016-05-23'),
('ad','2016-05-01'), ('ad','2016-05-02'), ('ad','2016-05-03'),('ad','2016-05-04'),('ad','2016-05-21'),('ad','2016-05-23');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |