MySQL查询以查找每周唯一的新访客数
我在MySQL中有3个表: 1页id,标题 2访客id、姓名 3页面访问页面id、访客id、访问时间戳 访问者可以在几天内多次访问页面。因此,虽然一个页面有一行,一个访问者有一行,但我们可以有几个页面访问行,每个行都有访问的时间戳 我正在努力找到每周的独特访客数量。我知道如何获取非uniques的“按周计数”查询,即“我每周看到多少访客”。不过,我不知道如何按周挑选独特的访客,因为访客只是第一次出现在名单上MySQL查询以查找每周唯一的新访客数,mysql,sql,Mysql,Sql,我在MySQL中有3个表: 1页id,标题 2访客id、姓名 3页面访问页面id、访客id、访问时间戳 访问者可以在几天内多次访问页面。因此,虽然一个页面有一行,一个访问者有一行,但我们可以有几个页面访问行,每个行都有访问的时间戳 我正在努力找到每周的独特访客数量。我知道如何获取非uniques的“按周计数”查询,即“我每周看到多少访客”。不过,我不知道如何按周挑选独特的访客,因为访客只是第一次出现在名单上 ----------- ----------- --------------
----------- ----------- ----------------------------
| page | | visitor | | page_visit |
----------- ----------- ----------------------------
|id |title| |id |name | |pid|vid|timestamp of visit|
----------- ----------- ----------------------------
| 1 | p1 | | 1 | v1 | | 1 | 1 | 02-18-2016:08:30 |
| 2 | p2 | | 2 | v2 | | 1 | 1 | 02-18-2016:10:00 |
| 3 | p3 | | 3 | v3 | | 1 | 3 | 02-20-2016:23:45 |
| 4 | p4 | | 4 | v4 | | 2 | 3 | 02-22-2016:07:30 |
| 5 | p5 | | 5 | v5 | | 3 | 1 | 02-23-2016:08:30 |
| 6 | p6 | | 6 | v6 | | 3 | 6 | 02-24-2016:09:30 |
结果集应显示的内容:
------------------------
| results |
------------------------
| Week of | Net new |
------------------------
| 02-15-2016 | 2 |
| 02-22-2016 | 1 |
如前所述,我可以计算出如何按周显示所有访客。我不知道如何才能得到独一无二的访客
我试着做一个mintimestamp的访问,但是,根据我尝试的地方,它返回了所有行中最低的时间戳,这是可以理解的
任何帮助都将不胜感激 当你第一次遇到这个问题时,这是一个棘手的问题。它需要两个级别的聚合。第一个是每个访问者的第一次访问,第二个是按时间进行总结。以下是每日总结:
select date(minvd), count(*) as numvisitors
from (select vid, min(visitdate) as minvd
from page_visit pv
group by vid
) v
group by date(minvd)
order by date(minvd);
翻译成“周”总是有点棘手——它们是从周一开始的吗?周六结束?星期五?这些我都看过了。但是,上面的内容是累加的,因此您可以只添加给定周的所有值来获得您的值。如果您不想在没有子查询的情况下执行此操作:
SELECT
<week>,
COUNT(DISTINCT PV.vid)
FROM
Page_Visit PV
LEFT OUTER JOIN Page_Visit PV2 ON
PV2.vid = PV.vid AND
PV2.visit_date < PV.visit_date
WHERE
PV2.vid IS NULL
GROUP BY
<week>
正如Gordon提到的,如何确定一周可能很棘手。在你看到的地方加上计算。就个人而言,我喜欢使用日历表来实现这种功能,但这取决于您。您可以直接对PV.visit\u date运行任何表达式以确定它。谢谢!!!这是非常有帮助的,我得到了工作的基础上,这!我一直想弄清楚如何排列元素,以便运行计数函数。对于“周”计算,我使用了以下格式:DATE_FORMATDATE_ADDv.minvd,INTERVAL1-DAYOFWEEKv.minvd DAY,“%Y-%m-%d”作为“周”,最后,“GROUP BY YEARWEEKv.minvd”我的MySQL引擎默认在周日开始一周。谢谢你,林诺夫先生!