2017-05-27 2 views
2

URLとタイムスタンプの列を含むテーブル(さまざまな記事のページビュー)に一連の行があり、N日以内に各記事の合計ページビュー数を確認したい最初のページビューの最初の出現からN日以内のカウントイベント

各記事の合計ページビュー数を表示するには「GROUP BY url」を使用できます。ハードコードされた特定の日付範囲内のページビューのみをカウントするにはWHERE句を使用できますが、それぞれ固有のURL。

MIN()を使用して各URLの最初の出現箇所を見つけることができますが、WHERE句とともにMIN()の値を使用する必要があります。私は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

よかった、ありがとう!私はRedshiftを使ってRedshiftに問い合わせていますが、 "+ INTERVAL 3 DAY"に構文エラーがあります。私はちょうど "+ 3"を試して、それは正常に動作しているようです。 –

+0

最初に赤方偏移について言及しておきます。 '+ 3'が動作するか、明示的に' DATEADD(day、3、f.first_viewed_at) 'を使うことができます。 – peterm

関連する問題