mysql - 查找没有活跃产品的用户
问题描述
我有以下数据库
id | userid | productid | specialid | buydate (timestamp in this sample as YYYY-MM-DD)
1 | 1 | 1 | 1 | 2020-12-01
2 | 2 | 1 | 3 | 2020-12-25
3 | 3 | 1 | 6 | 2020-12-20
4 | 4 | 1 | 2 | 2020-12-15
5 | 2 | 1 | 4 | 2021-01-15
我想知道谁有活跃的产品。我想获取在 2020-12-01 和 2020-12-18 之间购买该产品的特殊用户的所有用户 ID,而不是从最近购买相同产品的用户那里获取。
在本例中,这将是 ID 1,3,4。userid 2 在此期间购买了该产品,但在 1 月份再次购买了相同的产品。
目前我只能想出在 PHP 中创建两个数组的想法(一个是在 2020-12-01 和 2020-12-18 之间购买的),一个是在 2020-12-19 和 2021-01 之间购买的 - 25. 在另一个循环中,我可以检查新的匹配项中是否存在匹配项并将它们从第一个数组中删除。
但是没有“更简单”的方法吗?
解决方案
鉴于此基本表结构:
CREATE TABLE data
(
id INT NOT NULL AUTO_INCREMENT,
userid INT NOT NULL,
productid INT NOT NULL,
specialid INT NOT NULL,
buydate DATETIME NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO data VALUES
(1, 1, 1, 1, '2020-12-01'),
(2, 2, 1, 3, '2020-12-25'),
(3, 3, 1, 6, '2020-12-20'),
(4, 4, 1, 2, '2020-12-15'),
(5, 2, 1, 4, '2021-01-15'),
(7, 2, 1, 4, '2020-12-15');
您应该能够编写一个简单的查询来为您处理这个问题。主查询选择您的数据范围,子查询排除最近的数据。
SELECT
*
FROM
data
WHERE
buydate BETWEEN '2020-12-01' AND '2020-12-18'
AND
NOT userid IN
(
SELECT
userid
FROM
data
WHERE
buydate > '2020-12-18'
)
;
这应该会产生以下结果:
ID | 用户身份 | 产品编号 | 特殊的 | 购买日期 |
---|---|---|---|---|
1 | 1 | 1 | 1 | 2020-12-01 00:00:00 |
4 | 4 | 1 | 2 | 2020-12-15 00:00:00 |
推荐阅读
- java - Java 使用 DOM Reader 获取属性
- php - 将 Yii2 应用程序配置为依赖项
- macos - 将 Windows 批处理文件转换为使用 mac sh 文件
- aws-sdk-cpp - 有没有办法使用 AWS C++ 开发工具包获取基于角色的临时凭证?
- node.js - 节点中的并发 HTTP POST 请求?
- python - 没有明显原因的字典更改
- python - comparing values in two pandas dataframes to keep a running count
- html - 尝试在我的 Style 脚本中使用 ID,但它不起作用
- android - 为什么即使应用程序关闭也想接收广播时取消注册广播接收器?
- ios - 发出从 firebase 调用信息以设置按钮标题的问题