Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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 如何运行查询以获取过去12个月的结果(BigQuery)_Sql_Google Cloud Platform_Google Bigquery_Bigquery Standard Sql - Fatal编程技术网

Sql 如何运行查询以获取过去12个月的结果(BigQuery)

Sql 如何运行查询以获取过去12个月的结果(BigQuery),sql,google-cloud-platform,google-bigquery,bigquery-standard-sql,Sql,Google Cloud Platform,Google Bigquery,Bigquery Standard Sql,我想在大查询表中获取过去12个月特定ID的记录。我从原始的timestamp列中提取了月份和年份作为单独的列。我尝试使用date\u add()和date\u diff(),但出现了一些错误。我的数据集如下所示: Month Year MonthName ID 8 2018 August 1 9 2018 September 2 9 2017 September 3 如何实现这一点?一种方法是从某个日期开始将年/月转换为月。然后对当前

我想在大查询表中获取过去12个月特定ID的记录。我从原始的timestamp列中提取了月份和年份作为单独的列。我尝试使用date\u add()和date\u diff(),但出现了一些错误。我的数据集如下所示:

Month Year MonthName    ID
8     2018   August      1
9     2018   September   2
9     2017   September   3

如何实现这一点?

一种方法是从某个日期开始将年/月转换为月。然后对当前日期执行相同操作:

where year * 12 + month >= extract(year from current_date) * 12 + extract(month from current_date) - 12
这假设您没有未来的数据。对于未来的日期也有同样的想法(使用<而不是>=)

我从原始的timestamp列中提取了月份和年份作为单独的列

我建议根据原始时间戳列进行12个月的筛选。
假设它被命名为
ts
——下面是用于BigQuery标准SQL的

WHERE DATE(ts) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 12 MONTH) AND CURRENT_DATE() 
比如说

#standardSQL
SELECT ts, id
FROM `project.dataset.table`
WHERE id = 1
AND DATE(ts) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 12 MONTH) AND CURRENT_DATE() 

时间戳
被假定为BQ表的标准时间戳命名,作为时间标识符字段。因此,您可以按如下方式进行筛选,仅获取最近12个月的数据:

WHERE DATE(TIMESTAMP_MILLIS(timestamp)) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 12 MONTH) and CURRENT_DATE()