2017-06-02 62 views
1

我試圖在谷歌BigQuery的過去3個月內拉下所有客戶少於4個訂單 。谷歌大查詢計數

SELECT a.user_id, b.refer_by, FROM water_db.tb_order a INNER JOIN 
    water_auth.tb_users b ON a.user_id = b.user_id WHERE ( SELECT 
    user_id FROM 
    water_db.tb_order GROUP BY 
    user_id HAVING 
    COUNT(DISTINCT(a.user_id <= 4))) AND status = 3 AND DATE(a.order_date) >= 
    '2017-02-15' AND DATE(a.order_date) <= '2017-05-15';------ 
+0

歡迎來到SO。如果你有問題,請包括你正在嘗試做什麼,你嘗試過什麼,以及它的輸出等。 – Sneha

+0

你是初學者嗎? – maSTAShuFu

+0

是的,我是新來的這個plz幫助在這 – vamsi

回答

0

我猜每個記錄添加到它相當於一個訂單,但像一些表時間:

SELECT 
a.userid, b.refer_by 
FROM water_db.tb_order a 
INNER JOIN water_auth.tb_users b ON a.user_id = b.user_id 
WHERE 
(COUNT(userid) < 4) 
and 
DATE_ADD(MONTH, -4, a.order_date) 

日期的功能可能會有所不同,因爲我不是100%確定Google Big Query中的內容

0

我認爲最好的方法是從用戶表中進行選擇,因此您不需要重複刪除ID,只需將條件表達爲WHERE子句的一部分即可。這應該有助於開始:

#standardSQL 
SELECT 
    user_id, 
    refer_by 
FROM water_db.tb_users 
WHERE (
    SELECT COUNT(*) 
    FROM water_db.tb_order 
    WHERE tb_users.user_id = tb_order.user_id AND 
    status = 3 AND 
    DATE(order_date) BETWEEN '2017-02-15' AND '2017-05-15' 
) <= 4; 

在此查詢中,聯接表示爲涉及兩個表的相關子查詢。您可以使用此查詢使用示例數據來嘗試:

#standardSQL 
WITH tb_users AS (
    SELECT 1 AS user_id, '[email protected]' AS refer_by UNION ALL 
    SELECT 2, '[email protected]' UNION ALL 
    SELECT 3, '[email protected]' 
), 
tb_order AS (
    SELECT 1 AS user_id, TIMESTAMP '2017-04-12' AS order_date, 3 AS status UNION ALL 
    SELECT 2, TIMESTAMP '2017-05-03', 3 UNION ALL 
    SELECT 1, TIMESTAMP '2017-03-13', 3 UNION ALL 
    SELECT 1, TIMESTAMP '2017-02-28', 3 UNION ALL 
    SELECT 2, TIMESTAMP '2017-05-06', 3 UNION ALL 
    SELECT 1, TIMESTAMP '2017-05-01', 3 UNION ALL 
    SELECT 1, TIMESTAMP '2017-05-02', 3 
) 
SELECT 
    user_id, 
    refer_by 
FROM tb_users 
WHERE (
    SELECT COUNT(*) 
    FROM tb_order 
    WHERE tb_users.user_id = tb_order.user_id AND 
    status = 3 AND 
    DATE(order_date) BETWEEN 
     '2017-02-15' AND '2017-05-15' 
) <= 4;