计算购买表中不同的新用户(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数据库

在MySql中的每个新用户之后计算表中的行/条目

阿里云ECS活动 20180328新用户参与优惠购买 99/年189/2年279/3年

阿里云服务器新用户优惠99一年279三年

将 MAMP Pro 转移到具有新用户名的新 Mac

替换 MySQL 中的联合