Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在Bigquery的LIMIT子句中从视图传递变量_Sql_Google Bigquery - Fatal编程技术网

Sql 在Bigquery的LIMIT子句中从视图传递变量

Sql 在Bigquery的LIMIT子句中从视图传递变量,sql,google-bigquery,Sql,Google Bigquery,我需要创建一个变量来存储要筛选的用户数。基本上,我需要检查一个用户在一定数量的月份内生成了多少事件,然后只使用前几个用户。 我注意到Bigquery没有设置变量的功能,因此我创建了一个包含我的变量的视图 我有以下Bigquery SQL代码 WITH vars AS ( SELECT 3 as num_months, 200000 as num_users ) SELECT id, count(d.value) as count_value FROM events_dat

我需要创建一个变量来存储要筛选的用户数。基本上,我需要检查一个用户在一定数量的月份内生成了多少事件,然后只使用前几个用户。 我注意到Bigquery没有设置变量的功能,因此我创建了一个包含我的变量的视图

我有以下Bigquery SQL代码

WITH vars AS (
  SELECT 3 as num_months,
         200000 as num_users
)

SELECT id, count(d.value) as count_value
FROM events_data evt, unnest(evt.data) AS d, vars
WHERE  DATE(eventdate) > date_sub(current_date(), INTERVAL num_months MONTH) AND d.key='eventid'
GROUP BY id
ORDER BY count_value
LIMIT num_users
num_months的使用在过滤num months时非常有效,但是当我试图在limit子句中限制用户数量时,它会出现以下错误

Syntax error: Unexpected identifier "num_users"
我甚至尝试过引用视图以及vars.num\u用户

使用行编号:


我通常会调用这样的CTEs参数,所以我将其重命名。

所以,使用LIMIT无法实现,是吗?@VarunKumar。如果你有问题,你应该以问题的形式提出,包括样本数据、期望的结果,以及对你想要完成的事情的清晰解释。
WITH params AS (
      SELECT 3 as num_months, 200000 as num_users
     )
SELECT *
FROM (SELECT id, COUNT(*) as count_value,
             ROW_NUMBER() OVER (ORDER BY COUNT(*) ASC) as seqnum
      FROM events_data evt, unnest(evt.data) d JOIN
           params
           ON DATE(eventdate) > date_sub(current_date(), INTERVAL num_months MONTH) AND
      WHERE d.key = 'eventid'
      GROUP BY id
     ) id CROSS JOIN
     params
WHERE seqnum <= params.num_users
ORDER BY count_value;