我在表格中有一系列行(各种文章的综合浏览量),其中包含网址和时间戳的列,我希望在第一次浏览的N天内看到每篇文章的综合浏览量总数。
我可以使用" GROUP BY url"查看每篇文章的总浏览量,我可以使用WHERE子句仅计算某个硬编码日期范围内的网页浏览量,但我需要为每个唯一网址自定义该日期范围。
我相信我可以使用MIN()来查找每个URL的第一个匹配项,但我需要以某种方式将这些MIN()值与WHERE子句一起使用。我想我需要使用JOIN,但我似乎无法弄清楚语法。非常感谢!
答案 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演示