2016-12-09 5 views
1

最後のx日のカウントを持つカラムと同様に、カウントが1つずつあるクエリを実行する最適な方法を見つけようとしていますが、実現しました。ルックバックウィンドウを日付別にグループ化したSQLの別個のカウント

私はの線に沿って何かしようとしていた:

SELECT 
date(created_at), 
count(DISTINCT(user_id)) AS daily_users, 
count(
    DISTINCT (
     CASE 
     WHEN date(created_at) BETWEEN date_sub(created_at, INTERVAL 2 DAY) 
     AND created_at THEN 
      user_id 
     END 
    ) 
) AS users_2_day_lookback 
FROM 
table.users 
WHERE 
date(created_at) BETWEEN 'yyyy-mm-dd' 
AND now() 
GROUP BY 
1 

をしかし、何も2日間を振り返る列に戻っていません。おそらく自己結合を含む何らかの外部クエリでこれを行うべきだと感じていますが、その構文がどのように見えるかわかりません。どんな助けでも大歓迎です。

+0

私はこれが 'SQL-Server'の質問ではなく、' mysql'の質問だと思います。このような場合は、タグを削除してください。 – DVT

答えて

0

、カウント・バイ・デイのクエリ:

select date(created_at), 
     count(distinct user_id) as daily_users 
from table.users u 
group by date(created_at); 

2日間のルックバックは、このようなものです:

select dte, daily_users, 
     (select count(distinct u2.user_id) 
     from table.users u2 
     where u2.created_at >= date_sub(dte, interval 2 days) and 
       u2.created_at < date_add(dte, interval 1 day) 
     ) as users_2_day_lookback 
from (select date(created_at) as dte, 
      count(distinct user_id) as daily_users 
     from table.users u 
     group by date(created_at) 
    ) u; 

このクエリでは、現在の日として「2日間で振り返る」解釈します2つの前日を加えたものです。代替定義のために条件を変更するだけでも十分です。

+0

素晴らしい、これは動作します!助けてくれてありがとう! – Chaz

関連する問題