在第一次发生的 N 天内计数事件

Posted

技术标签:

【中文标题】在第一次发生的 N 天内计数事件【英文标题】:count events within N days of first occurrence 【发布时间】:2017-05-27 17:11:58 【问题描述】:

我在表格中有一系列行(各种文章的浏览量),其中包含 URL 和时间戳列,我想查看每篇文章在第一次浏览量的 N 天内的浏览量总数。

我可以使用“GROUP BY url”来查看每篇文章的总浏览量,我可以使用 WHERE 子句仅计算某个硬编码日期范围内的浏览量,但我需要为每个文章自定义该日期范围唯一的网址。

我相信我可以使用 MIN() 来查找每个 URL 的第一次出现,但我需要以某种方式将这些 MIN() 值与 WHERE 子句一起使用。我想我需要使用 JOIN,但我似乎无法弄清楚这种语法。非常感谢您的帮助!

【问题讨论】:

请分享table structure,您尝试过的查询和预期的结果集。仅仅通过问题可能无法构建有效的查询。 【参考方案1】:

几乎和你解释的完全一样。

带有JOIN的版本

SELECT v.url, COUNT(*) views
  FROM pageviews v JOIN (
    SELECT url, MIN(viewed_at) first_viewed_at
      FROM pageviews
     GROUP BY url
  ) f
   ON v.url = f.url
 WHERE v.viewed_at < f.first_viewed_at + INTERVAL 3 DAY
 GROUP BY v.url;

具有相关子查询的版本

SELECT url, COUNT(*) views
  FROM pageviews v
 WHERE viewed_at < (
   SELECT MIN(viewed_at)
     FROM pageviews
    WHERE url = v.url
   ) + INTERVAL 3 DAY
GROUP BY v.url;

这是一个dbfiddle 演示

【讨论】:

太好了,谢谢!我正在通过 Redash 查询 Redshift,它在“+ INTERVAL 3 DAY”上给出了语法错误。我只尝试了“+ 3”,这似乎工作正常。 你应该首先提到红移。 +3 应该可以工作,或者您可以显式使用 DATEADD(day, 3, f.first_viewed_at)

以上是关于在第一次发生的 N 天内计数事件的主要内容,如果未能解决你的问题,请参考以下文章

PromQl:对计数器的第一个值发出警报

我不了解 cachegrind 与 perf 工具之间的缓存未命中计数

羊车门问题

UIButton 多个事件

如果事件每 X 分钟发生一次以上,则仅计算一次事件

2022-05-27:现在有N条鱼,每条鱼的体积为Ai,从左到右排列,数组arr给出。 每一轮,左边的大鱼一定会吃掉右边比自己小的第一条鱼, 并且每条鱼吃比自己小的鱼的事件是同时发生的。 返回多少轮之