2016-10-05 36 views
2

我有以下表格:SQL /紅移:第一次購買之前查詢用戶行爲

Table: users 
id | created_ts | username_str 
--------------------------------- 

Table: activity 
user_id | created_ts | activity_descr_str 
--------------------------------- 

Table: purchase_orders 
id | user_id | created_ts | price 

users.id是主鍵到外鍵user_id說明。 我想知道有多少用戶在首次購買之前有< = 3個活動。但僅適用於日期X之後新加入的用戶(說'2016-08-01')。

非常感謝。

編輯,2016年10月6日:

這是我已經試過:

SELECT COUNT(DISTINCT user_id) 
FROM (SELECT po.user_id 
      FROM purchase_orders po 
     LEFT JOIN activity a USING (user_id) 
     JOIN users u ON u.id = po.user_id 
    WHERE DATE (po.created_ts) >= '2016-08-01' 
     AND a.created_ts < po.created_ts 
     GROUP BY 1 
     HAVING COUNT(a.created_ts) <= 3) 
+1

你的問題應該包括你已經嘗試代碼。這看起來像一個家庭作業類型的問題。 –

+0

是的,你是對的。我已經添加了我的代碼。正如我懷疑我的代碼產生了與您不同的結果,@GordonLinoff。我不太明白爲什麼,因爲兩者看起來都很相似。 – McRalphie

回答

2

你只需要打破邏輯分成幾部分:

  • 獲得第一每個用戶的訂單日期。
  • 過濾掉過時的用戶。
  • 參加活動,注意日期。
  • 計算每個用戶的活動數量。
  • 過濾並重新計數。

因此,一種方法是這樣的查詢:

select count(*) 
from (select user_id, count(a.user_id) as num_activities 
     from (select po.user_id, min(created_ts) as mints 
      from purchase_orders po 
      group by po.user_id 
      having min(created_ts) >= '2016-08-01' 
      ) o left join 
      activity a 
      on a.user_id = o.user_id and a.created_ts < o.created_ts 
     group by user_id 
    ) u 
where num_activities <= 3; 
相關問題