我试图计算用户打开我们的电子邮件的频率,但是一周内我们没有打开任何电子邮件。查询看起来像
select * from user_email_tracking uet1 where opened_timestamp is not null and
select(max(opened_timestamp) from user_email_tracking where user_id = uet1.user_id
and opened_timestamp < uet1.opened_timestamp
即使我认为嵌套选择,也可能效率太低。这是一张相当大的桌子。我现在正在研究的逻辑可能还不够好,因为我需要基本上处理一个实际的完全笛卡尔连接,在我关心的领域创建的对角线下方。
答案 0 :(得分:0)
您要查找的是相关子查询,例如:
select *
from user_email_tracking uet
where opened_timestamp is not null and
not exists (select 1
from user_email_tracking uet2
where uet2.user_id = uet.user_id and
uet2.opened_timestamp >= date_add(uet1.opened_timestamp, interval -7 day)
);
为了方便日期算术,我假设timestamp
是datetime
。
为获得最佳效果,您需要user_email_tracking(user_id, user_email_tracking)
上的索引。