Mysql 在较大日期范围内的日期范围内查找n个事件

Mysql 在较大日期范围内的日期范围内查找n个事件,mysql,max,min,datediff,Mysql,Max,Min,Datediff,在MySQL中,我有一个记录用户“动作”的表(一个动作可以是任意数量的东西:点击、购买等等)。表看起来是这样的,其中action_id是唯一的: +--------------------------------------------+ | table_actions | +--------------------------------------------+ | action_id | user_id | date_cre

在MySQL中,我有一个记录用户“动作”的表(一个动作可以是任意数量的东西:点击、购买等等)。表看起来是这样的,其中action_id是唯一的:

+--------------------------------------------+
|               table_actions                |
+--------------------------------------------+
| action_id | user_id |     date_created     |
+-----------+---------+----------------------+
|         1 |     321 |  2011-01-21 06:00:00 |
+-----------+---------+----------------------+
|         2 |     123 |  2011-02-21 06:00:00 |
+-----------+---------+----------------------+
|         3 |     456 |  2011-03-21 06:00:00 |
+-----------+---------+----------------------+
|         4 |     654 |  2011-04-21 06:00:00 |
+--------------------------------------------+
我想找出在30个月的日期范围内,间隔不超过一年执行三次操作的不同用户ID的数量。我的第一次尝试是:

select ta.user_id
from table_actions ta
where ta.date_created > DATE_SUB(now(),interval 30 month)
group by ta.user_id
having COUNT(ta.action_id) > 2 AND DATEDIFF(MAX(ca.created_at),MIN(ca.created_at)) > 364;
这运行得很好,但只检查用户第一次和最后一次操作之间的差异时出错。如果用户的第一个操作和最后一个操作相隔30个月,但在这段时间内的某个地方,他们在3天内执行了3个操作,则我的查询不会计算这些操作

我的研究发现了一些关于日期范围的帖子,但没有一篇是在某个范围内查找特定次数的

我假设这可能涉及某种循环或行编号,但我很快就达到了知识的极限

更新1:

如果现实世界的例子有帮助:

Jane于2010年3月、2011年3月、2011年4月和2011年12月采取行动

John于2010年1月、2011年1月、2011年2月和2012年3月采取行动

每个人在过去30个月内都采取了3项或3项以上的行动,但只有Jane在过去30个月内的12个月内采取了3项或3项以上的行动。我正在寻找一个返回所有Janes的查询

我陷入困境的是,一个用户在过去30个月中可以采取任意数量的行动。如果它们仅限于3个动作,这将很简单。但是,我不知道如何让一个在过去30个月内采取了5项行动的用户检查其中3项行动是否在一年内发生


希望这有助于澄清。谢谢大家。

我的描述可能会让人困惑。“我想找出间隔不超过一年执行三次操作的不同用户ID的数量,”应该是:我想找出一年内执行三次操作的不同用户ID的数量。如果提供示例输入和预期输出,可能是描述问题的最佳方法。没问题。示例输入是我在下面概述的示例表:一个表,每个操作一行,每行包含一个唯一标识符(action\u id)、执行操作的用户的用户id以及执行操作的日期。所需的输出是在过去30个月的一年时间内,在表_操作中至少有3个条目的用户_id列表。这有用吗?