如何计算不同的日期时间戳并根据固定百分比过滤条目?

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

我正在尝试创建一个查询来查找访问者 abcdef 是否忠诚。

我的想法是有 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;

【讨论】:

您先生今天帮助了我两次,我学到了宝贵的经验。非常感谢

以上是关于如何计算不同的日期时间戳并根据固定百分比过滤条目?的主要内容,如果未能解决你的问题,请参考以下文章

Logstash 日期过滤器无法正常工作

根据 SQL 中的日期计算百分位数

从文件名中提取时间戳并使用 Pig 将其添加到新列(例如日期)中

在 CodeIgniter 中按日期过滤 MySQL 条目

如何根据来自不同列的多个值过滤熊猫表? [复制]

如何计算每组的百分比?