2017-02-28 19 views
0

知りたいことがありますか?過去にアクセスした人は誰ですか?人々の数。BigQueryでEXISTSを使用して過去ログに一致するものを取得する方法

SELECT 
    COUNT(user_id) AS repeater_user_count 
FROM 
    [access_log] AS table1 
WHERE 
    _PARTITIONTIME = TIMESTAMP('2017-02-28') 
AND 
    EXISTS 
    (
    SELECT 
     1 
    FROM 
     [access_log] AS table2 
    WHERE 
     _PARTITIONTIME BETWEEN TIMESTAMP('2017-01-31') AND TIMESTAMP('2017-02-27') 
    AND 
     table1.user_id = table2.user_id 
) 

ただし、BigQuery UIでエラーが発生します。

Error: error at: 8.1 - 13.184. Only one query can be executed at a time. 

BigQueryで同じテーブルを参照するにはどうすればよいですか?

ありがとうございました。

答えて

1

最初にenable standard SQLになるようにしてください。例えば、

#standardSQL 
SELECT 
    COUNT(user_id) AS repeater_user_count 
FROM 
    `access_log` AS table1 
WHERE 
    _PARTITIONTIME = '2017-02-28' 
AND 
    EXISTS 
    (
    SELECT 
     1 
    FROM 
     `access_log` AS table2 
    WHERE 
     _PARTITIONTIME BETWEEN '2017-01-31' AND '2017-02-27' 
    AND 
     table1.user_id = table2.user_id 
); 
+0

感謝を検討する別のオプション!標準のSQLを使って解決しました。 –

+0

私はそれが助けてうれしい!あなたの質問の1つがStackOverflowであなたの質問を解決するとき、それらの1つを受け入れ、任意にupvoteしてください。詳細については、[Someone answers](http://stackoverflow.com/help/someone-answers)を参照してください。 –

0

#standardSQL 
SELECT COUNT(user_id) AS repeater_user_count 
FROM (
    SELECT DISTINCT user_id 
    FROM `access_log` 
    WHERE _PARTITIONTIME = '2017-02-28' 
) 
WHERE user_id IN (
    SELECT DISTINCT user_id 
    FROM `access_log` 
    WHERE _PARTITIONTIME BETWEEN '2017-01-31' AND '2017-02-27' 
) 
+0

ありがとう!私は標準の存在を知っていました –

+0

@ YamadaJP - 標準についてはそれほどわかりませんが、それはIN対EXISTSを使用するロジックです。DISTINCTを使うとDISTINCTを使うとクエリが効率的になり、 –

関連する問題