MYSQL - 选择过去 3 个月内未输入但在过去 6 个月内输入过的现有用户

标签 mysql subquery

经过几个小时的搜索,我终于屈服并寻求帮助。我发现了一些可以让我接近的东西,但似乎无法正常工作。

基本上寻找 3-6 个月前使用过我们但最近 3 个月内没有使用过我们的用户。

为了举例,假设我有两个名为 event(id, clientFK, insert_date, officeFK) 和 client(id, name) 的表:

SELECT DISTINCT e.id, e.insertion_date, c.name
FROM event e
LEFT JOIN client c ON c.id = e.clientFK
WHERE e.id NOT IN (   
SELECT e.id
FROM event e
WHERE e.insertion_date
BETWEEN (
NOW( ) - INTERVAL 3
MONTH
)
AND NOW( )
)
AND e.insertion_date > ( NOW( ) - INTERVAL 6
MONTH )
AND officeFK =1
ORDER BY e.insertion_date DESC

**更新*** id 只是一个自动递增列,因此显然使用上面的逻辑它永远不会显示。我的意思是在事件表中搜索 clientFK 。根据下面的第一个回复,我想出了这个:

SELECT DISTINCT e.clientFK, e.insertion_date, c.name
FROM event e
LEFT JOIN client c ON c.id = e.clientFK
WHERE e.clientFK NOT IN (
  SELECT e.clientFK FROM event e
  WHERE e.insertion_date > (NOW() - INTERVAL 3 DAY)
)
AND e.insertion_date BETWEEN (NOW() - INTERVAL 3 DAY) AND (NOW() - INTERVAL 6 MONTH)
AND officeFK =1
ORDER BY e.insertion_date DESC

但是,即使将 NOT IN 子查询缩小到仅 3 天,我仍然返回 0 行。将 NOT IN 更改为 IN 也会导致返回 0 行。我的事件表中有数千行,其中 clientFK 在过去 3 天“不在”。我一定是在某个地方做错了什么。

下面的正确代码:

SELECT DISTINCT e.id, e.insertion_date, c.name
FROM event e
JOIN client c ON c.id = e.clientFK
WHERE e.clientFK NOT IN (
  SELECT e.clientFK FROM event e
  WHERE e.insertion_date > (NOW() - INTERVAL 3 MONTH)
)
AND e.insertion_date < (NOW() - INTERVAL 3 MONTH)
AND insertion_date > (NOW() - INTERVAL 6 MONTH)
AND e.officeFK = 1
ORDER BY e.insertion_date DESC

最佳答案

有多种方法可以做到这一点。但我认为你已经很接近了。您的主要查询中的 3-6 个月的日期范围似乎不正确。从 6 个月到现在,您一直在检查任何内容。这与 OP 的规范不符 - 3-6 个月前的事件用户,但不是最近 3 个月内的事件。逻辑上看起来是一样的,但是试试这个。

SELECT DISTINCT e.id, e.insertion_date, c.name
FROM event e
JOIN client c ON c.id = e.clientFK
WHERE e.clientFK NOT IN (
  SELECT e.clientFK FROM event e
  WHERE e.insertion_date > (NOW() - INTERVAL 3 MONTH)
)
AND e.insertion_date BETWEEN (NOW() - INTERVAL 3 MONTH) AND (NOW() - INTERVAL 6 MONTH)
AND e.officeFK = 1
ORDER BY e.insertion_date DESC

关于MYSQL - 选择过去 3 个月内未输入但在过去 6 个月内输入过的现有用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3919511/

相关文章:

mysql - 子查询返回多行错误

mysql - 左联接列上的 SUM 限制了结果

php - Yii 奇怪的行为 : CGridView + group + with

mysql - 显示值高于平均值和现场数据

sql - 如何将UNION查询视为子查询

php - 在服务器上运行的 MySQL 查询在本地不起作用

java - 在 sql Developer (oracle 11g) 中组织查询结果

mysql - 二级子查询嵌套导致未知列

mysql - CASE..WHEN 中的所有子查询是否都被执行,即使只满足一个条件?

mysql子查询where和group by