在较大日期范围内的日期范围内查找n次出现

时间:2012-04-25 20:22:24

标签: mysql max min datediff

在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个月的日期范围内找到相隔不超过一年的三次操作的不同user_ids的数量。我的第一次尝试是这样的:

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次或更多的行动,但只有Jane在过去30个月内采取了3次或更多的行动,这些行动在12个月内完成。我正在寻找一个返回所有Janes的查询。

我遇到困难的原因是用户可以在过去30个月内采取任何措施。如果它们仅限于3个动作,那么这很简单。但是,我不知道如何采取过去30个月内采取过5次行动的用户,并检查这些行动中有3次是否在一年内出现。

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

0 个答案:

没有答案