在第一次出现的N天内计算事件

时间:2017-05-27 17:11:58

标签: mysql sql datetime aggregate

我在表格中有一系列行(各种文章的综合浏览量),其中包含网址和时间戳的列,我希望在第一次浏览的N天内看到每篇文章的综合浏览量总数。

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

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

1 个答案:

答案 0 :(得分:2)

它几乎就像你解释过的那样。

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演示