MySQL : ある日から一定日数以内のユニークな値の数の集計

たとえば、2013年11月28日から20日以内のユニークなユーザーIDがいくつあるのか、といったデータを取るときのSQL文。

access_logというテーブルの中に、
dateというカラムに日にちが入っていて、
user_idというカラムにユニークなユーザーIDが入っている。

[sql]
SELECT DATE_FORMAT(date, ‘%Y-%m-%d’)
AS date,COUNT(DISTINCT user_id)
AS count
FROM access_log
WHERE DATE_SUB(‘2013-11-28’, INTERVAL 20 DAY) < date
AND date < ‘2013-11-28’
GROUP BY DATE_FORMAT(date, ‘%Y%m%d’);
[/sql]

 

ここで、

[sql]
DATE_SUB(‘2013-11-28’, INTERVAL 20 DAY)
[/sql]

は、
2013年11月28日から20日分を引いたもの、という意味。

[sql]
WHERE DATE_SUB(‘2013-11-28’, INTERVAL 20 DAY) < date
[/sql]

とすることで、「’2013-11-28’から20日引いたもの(つまり2013-11-28)より日にちが大きい物」ということになる。