- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道是否有人可以帮助我使用一些 SQL 来返回在两天或更长时间(让我们使用 7 天作为引用)期间登录到数据库表的唯一用户数。
我的日志表在每一行中包含一个时间戳 (ts) 和 user_id,代表该用户当时的事件。
以下查询返回此日志中的每日活跃用户数或 DAU:
SELECT FLOOR(ts / 86400) AS day, COUNT(DISTINCT user_id) AS dau
FROM log
GROUP BY day ORDER BY day ASC
现在假设我想向这个单一查询添加(或至少以最有效的方式检索)每周活跃用户数,或 7 天内登录的唯一身份用户总数。但是,我不想在不重叠的几周内分配我的时间。我需要为每一天计算当天和前 6 天看到的不同 user_id。
例如:
day users wau
1 1,2 2
4 1,3 3
7 3,4,5 5
8 5 4 (user_id 2 lost from count)
15 2 2 (user_ids 1,3,4 lost from count)
感谢您提供的任何帮助,如果您需要进一步说明,请随时通过评论提问。
最佳答案
要获得“每周平均用户”计数(根据我对您的规范的理解......“对于每一天,当天和前六天看到的不同 user_ids 的计数”),查询如下可以使用下面的那个。 (该查询还返回“每日平均用户”计数。
SELECT d.day
, COUNT(DISTINCT u.user_id) AS wau
, COUNT(DISTINCT IF(u.day=d.day,u.user_id,NULL)) AS dau
FROM ( SELECT FLOOR(k.ts/86400) AS `day`
FROM `log` k
GROUP BY `day`
) d
JOIN ( SELECT FLOOR(l.ts/86400) AS `day`
, l.user_id
FROM `log` l
GROUP BY `day`, l.user_id
) u
ON u.day <= d.day
AND u.day > d.day - 7
GROUP BY d.day
ORDER BY d.day
(我还没有对此进行测试;但我稍后会,如果需要任何更正,我会更新此声明。)
此查询将给定日期(来自 u
行源)的用户列表连接到日志表(d
行源)中的一组天数.请注意出现在连接谓词(ON 子句)中的文字“7”,这就是使用户列表与前 6 天“匹配”的原因。
请注意,这也可以扩展以获取过去 3 天的不同用户数,例如,通过在 SELECT 列表中添加另一个表达式。
, COUNT(DISTINCT IF(u.day<=d.day AND u.day>d.day-3,u.user_id,NULL)) AS 3day
可以增加文字“7”以获得更大的范围。上面表达式中的文字 3 可以更改为任意天数...我们只需要确保我们有足够的前一天行(来自 d
)连接到每一行你
。
性能注意事项:由于内联 View (或派生表,如 MySQL 所称),此查询可能不会很快,因为这些内联 View 的结果集必须具体化到中间 MyISAM 表中。
别名为 u
的内联 View 可能不是最优的;直接加入日志表可能会更快。我在考虑获取特定日期的唯一用户列表,这就是内联 View 中的查询让我得到的。我更容易将正在发生的事情概念化。而且我在想,如果一天有数百个相同的用户输入,那么在我们加入其他日子之前,内联 View 会清除一大堆重复项。最好在 u
和 d
内联 View 中添加一个 WHERE 子句来限制我们返回的天数。 (d
内嵌 View 需要额外提前 6 天。)
另一方面,如果 ts 列是 TIMESTAMP 数据类型,我会更倾向于使用 DATE(ts)
表达式来提取日期部分。但这将在结果集中返回 DATE 数据类型,而不是整数,这将与您指定的结果集不同。)
SELECT d.day
, COUNT(DISTINCT u.user_id) AS wau
, COUNT(DISTINCT IF(u.day=d.day,u.user_id,NULL)) AS dau
FROM ( SELECT DATE(k.ts) AS `day`
FROM `log` k
GROUP BY `day`
) d
JOIN ( SELECT DATE(l.ts) AS `day`
, l.user_id
FROM `log` l
GROUP BY `day`, l.user_id
) u
ON u.day <= d.day
AND u.day > DATE_ADD(d.day, INTERVAL -7 DAY)
GROUP BY d.day
ORDER BY d.day
关于mysql - 日志中每天的每周活跃用户数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13884609/
尝试根据 :server-name 在请求中返回的内容加载特定模板: (ns rosay.views.common (:use noir.core) (:require [noir.reque
我想检查谁是活跃用户(过去 7 天都登录过)以及谁是非活跃用户(过去 7 天没有登录过)。我有 2 个表用户和机构。用户表结构如下: id | first_name | email | agency
我的 CSS 有问题。我试图将事件类设置为在垂直菜单上以粉红色突出显示,但事实并非如此。我如何在没有用户悬停在它上面的情况下保持它点亮。这是我的 HTML 和 CSS。 HTML 代码:
我有一个 Tile,当它处于 Activity 状态时,会运行一个计时器,在这五分钟内执行一项任务,然后在一定时间后返回到非 Activity 状态。 但是,我遇到的问题是服务被终止了。当所述计时器启
我已经知道如何在点击类(class)时激活它,但是当我将鼠标悬停在特定区域时如何激活类(class)? 这里是点击时获取事件类的代码: >Contact 是不是这样的: $('').hover(
我在使用 screen 时遇到问题。我知道 screen session 在主进程工作时工作,但我怎样才能让这个 session 保持事件状态?我需要这个,因为 session 关闭时有一些子进程被杀
我有一个 session 超时为 15 分钟的站点。在某些页面上,用户有时会花费超过 15 分钟的时间来填写回复。在这种情况下,使 session 保持事件状态的最佳解决方案是什么? 我已经在这些页面
我正在网页(在弹出窗口中)检查用户状态 - 他是活跃的还是空闲的。如果他空闲超过 30 分钟,窗口将自动关闭并重置数据库中的一些标志。 我设置了包含时间的 cookie(他打开弹出窗口的时间),并在每
由于某种原因,Jenkins 一直停止工作,我必须重新启动 jenkins 服务才能使其再次工作。每次发生这种情况时,服务都是“事件(退出)”,但日志中没有任何内容。我使用 Ubuntu 16.04。
我有一个幻灯片,需要单击它才能转到下一个图像/视频。但是,我想自动执行此操作,因此不需要任何用户事件。 页面如下所示: Slide 1 Slide 2 Slide
我正在使用 C# 应用程序来验证和检查位于 Window 2008 64 位服务器上的 Active Directory 用户。 使用以下代码提供用户名和密码时,我能够成功验证用户:我的域名值为 ro
这个问题在这里已经有了答案: Is there a CSS parent selector? (33 个答案) 关闭 9 年前。 有没有办法根据类中子元素的类来选择父元素?与我相关的示例是关于 ht
我正在尝试连接到 API,对用户进行身份验证,然后查看用户详细信息。这是通过首先访问登录端点来完成的 http://api.example.com/login// 登录然后查看用户详细信息: http
我正在尝试连接到 API,对用户进行身份验证,然后查看用户详细信息。这是通过首先访问登录端点来完成的 http://api.example.com/login// 登录然后查看用户详细信息: http
我是一名优秀的程序员,十分优秀!