2017-05-27 72 views
2

我在表格(各種文章的綜合瀏覽量)中列出了一系列包含網址和時間戳列的行,我希望在N天內看到每篇文章的綜合瀏覽量其首頁瀏覽量。第一次出現N天內計數事件

我可以使用「GROUP BY url」來查看每篇文章的總瀏覽量,並且我可以使用WHERE子句僅計算特定硬編碼日期範圍內的瀏覽量,但我需要自定義該日期範圍每個唯一的網址。我相信我可以使用MIN()來查找每個URL的第一次出現,但我需要以某種方式將這些MIN()值與WHERE子句一起使用。我想我需要使用JOIN,但我似乎無法弄清楚這種語法。非常感謝!

+1

請分享'表structure',你必須查詢嘗試和預期的結果集。僅通過查看問題就可能無法構建高效的查詢。 –

回答

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

+0

太好了,謝謝!我通過Redash查詢Redshift,並在「+ INTERVAL 3 DAY」中給出了語法錯誤。我嘗試了「+ 3」,似乎工作正常。 –

+0

你應該首先提到紅移。 '+ 3'應該可以工作,或者你可以明確地使用'DATEADD(day,3,f.first_viewed_at)' – peterm