也许听起来很简单,但问题是。
我有用户可以在每次散步时添加步骤。每次他们记录步骤时,它都会向表中添加一个新条目。条目表模式是:
id,user_id,steps,date_created
我们的想法是让那些已经开始添加步骤的用户因某些原因在某些日子里没有活动
这个过程看起来像(每天):
第1天:用户添加步骤(早上)
用户添加步骤(晚上)
第2天:用户不添加任何内容
第3天:用户添加步骤
第4天:用户不添加任何内容
。
。
。
第11天:用户不添加任何内容
系统将触发该用户的提醒
第12天:用户不添加任何内容
系统不会触发提醒,因为它只应发送一次
我的问题是,我是否可以在一个查询中实现此目的,并且没有已发送电子邮件的标志?
我的想法是从条目表中提取user_id并检查它们是否在过去7天内添加了任何内容,但是如何摆脱那些在7天以上没有活动的人。
拉动所有用户:
SELECT
DISTINCT(user_id)
FROM
entries
在过去7天内吸引活跃用户:
SELECT
DISTINCT(user_id)
FROM
entries
WHERE
date_created BETWEEN '2014-01-17' AND NOW()
ORDER BY
date_created DESC
任何建议都表示赞赏(可能是我的头脑中很长时间而且我过度复杂了)。
感谢。
答案 0 :(得分:1)
此查询应该这样做。很方便保持你的“诡计”。
SELECT u.user_name,
FROM users AS u
LEFT OUTER
JOIN entries AS e
ON e.user_id = u.user_id
AND e.date_created >= CURRENT_DATE - INTERVAL 7 DAY
WHERE e.user_id IS NULL
在查询中,左连接会获得不想要查找的匹配项。因此,您感兴趣的条件(日期范围)进入ON子句。 WHERE子句限制为不匹配的行(在这种情况下,所有不匹配的行将从连接返回null。
一些参考文献: When to use a left outer join?