计算购买表中不同的新用户(MySQL)
Posted
技术标签:
【中文标题】计算购买表中不同的新用户(MySQL)【英文标题】:Counting distinct new users in purchase table (MySQL) 【发布时间】:2018-02-26 21:46:29 【问题描述】:我正在使用元数据库生成有关多个指标的客户报告。我有 SQL 方面的初学者知识,但 GUI 有助于构建除少数之外的大多数查询。
我有两张桌子
-
用户表,包括用户注册时间和用户 ID 的时间戳
包括用户 ID 的采购表(在用户表中可见)
我需要什么:表格显示当月购买的累计新用户(当月注册)。
我假设加入两个表,然后在检查注册日期时计算按天分组的不同 id 应该可以解决这个问题,但我对实际查询的样子有一个非常粗略的想法。
我认为这里已经回答了部分问题 - Cumulative distinct count
但是我不知道如何检查注册日期。任何帮助表示赞赏。
用户表列 ID、Email、Timestamp(时间戳记录入职日期)
采购表列 ID、用户ID、用户邮箱、产品ID、时间戳(这里的时间戳是购买时间)
编辑 感谢到目前为止的 cmets,我已经能够在当月的每一天进行购买时获得新的用户 ID。现在我需要将这些 ID 的累积总和放在一行中,以便在时间段结束时,我知道添加了多少新用户。
这是我当前的代码
SELECT count(DISTINCT p.`user_id`) Users_Activated, date(p.`timestamp`) Day
FROM `purchase` p
INNER JOIN `user` u ON u.`id` = p.`user_id`
WHERE date(u.`timestamp`) BETWEEN date1
AND date2 AND date(p.`timestamp`) BETWEEN date3 AND date4
GROUP BY date(p.`timestamp`)
ORDER BY date(p.`timestamp`) ASC
【问题讨论】:
WHERE YEAR(registrationdate) = YEAR(NOW()) AND MONTH(registrationdate) = MONTH(NOW())
请提供您为此尝试的任何查询。我们甚至不知道表名或列名,至少通过查看现有查询我们可以填写所需的逻辑。和/或您可以为每个表提供示例数据。
添加了我目前每天获得总购买量的基本代码。我现在需要计算不同的用户 ID,并检查当月注册的新用户
【参考方案1】:
不知道你的桌子的完整结构,我会尽力而为。
SELECT u.* -- This will give you all info on all users
FROM users u
INNER JOIN purchases p
ON p.userID = u.ID
WHERE u.registrationDate BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
鉴于可用信息有限,我认为这会奏效。时间间隔位might be a bit different 但可能不是。
【讨论】:
【参考方案2】:怎么样
SELECT DISTINCT u.id, u.whatever
FROM user_table u INNER JOIN purchase_table p
ON (u.id = p.userid)
WHERE u.signup >= DATE_FORMAT(NOW() ,'%Y-%m-01')
这应该会为您提供当前日历月的购买记录。
【讨论】:
以上是关于计算购买表中不同的新用户(MySQL)的主要内容,如果未能解决你的问题,请参考以下文章
阿里云年中618-新用户特殊活动-首次购买即可免费使用mysql数据库