如何计算不同的日期时间戳并根据固定百分比过滤条目?
Posted
技术标签:
【中文标题】如何计算不同的日期时间戳并根据固定百分比过滤条目?【英文标题】:How to count distinct date timestamps and filter entries based on fixed percentage? 【发布时间】:2018-02-03 17:47:27 【问题描述】:visitor --- timestamp
abc --- 2018-02-03 03:24:26
abc --- 2018-02-03 02:20:20
abc --- 2018-02-01 15:10:26
abc --- 2018-01-31 18:24:26
abc --- 2018-01-30 12:20:20
abc --- 2018-01-26 10:10:26
def --- 2018-02-03 03:24:26
def --- 2018-01-30 12:20:20
def --- 2018-01-26 10:10:26
我正在尝试创建一个查询来查找访问者 abc
、def
是否忠诚。
我的想法是有 14 天的固定时间范围。问题是访问者登录了多少次。在abc
的情况下,在这 14 天的时间范围内,有 5 个不同的天进行了访问。
另一方面,def
在 3 个独特的日子里进行了访问。
我想要过滤,比如说,在这 14 天的时间范围内,哪个访问者至少有 30% 的忠诚度。在此示例中,abc
是,但 def
不是。
查询的问题:
它不考虑不同的(日期(时间戳)和sums
所有访问,包括每个访问者一天内的多次访问
我不知道如何过滤它们,比如上面提到的 30%
SELECT visitor, Sum(DATE (TIMESTAMP) BETWEEN Date_sub(Curdate(), INTERVAL 14 day)
AND Curdate()) AS last_twoWeeks
FROM behaviour
WHERE TIMESTAMP >= Curdate() - INTERVAL 14 day
GROUP BY visitor
ORDER BY last_twoweeks DESC
【问题讨论】:
【参考方案1】:您正在寻找count(distinct)
。要仅获得“忠实”访问者,您可以使用 HAVING
子句:
SELECT visitor,
COUNT(DISTINCT Date(timestamp)) AS days_last_two_weeks
FROM behaviour
WHERE timestamp >= Curdate() - INTERVAL 14 day
GROUP BY visitor
HAVING days_last_two_weeks >= 0.3 * 14
ORDER BY last_twoweeks DESC;
【讨论】:
您先生今天帮助了我两次,我学到了宝贵的经验。非常感谢以上是关于如何计算不同的日期时间戳并根据固定百分比过滤条目?的主要内容,如果未能解决你的问题,请参考以下文章