Sql 在查询中使用相同的表,但日期不同

Sql 在查询中使用相同的表,但日期不同,sql,google-bigquery,Sql,Google Bigquery,我正在尝试创建一份包含今年数据和去年数据的报告。我当前正在更改此查询中的日期: SELECT TransactionDate, Source, Medium, Campaign, AdContent, Keyword, Country, Device, Region, ROUND(SUM (Revenue),2) AS Equity_Revenue, ROUND(SUM (Sales),2) Equity_Sales, FROM (TABLE_DATE_

我正在尝试创建一份包含今年数据和去年数据的报告。我当前正在更改此查询中的日期:

SELECT TransactionDate, Source, Medium, Campaign, AdContent,
       Keyword, Country, Device, Region,
       ROUND(SUM (Revenue),2) AS Equity_Revenue,
       ROUND(SUM (Sales),2) Equity_Sales,
FROM (TABLE_DATE_RANGE([analytics.order_attribution_], TIMESTAMP('2018-02-26'), TIMESTAMP('2018-03-04')))

WHERE ReportType = 'Daily Equity Report' AND Channel = 'Email'
GROUP BY TransactionDate, Source, Medium, Campaign, AdContent,
         Keyword, Country, Device, Region,

ORDER BY Equity_Revenue DESC;

以及更改日期。是否可以在下面添加相同的查询,这样我就可以更改日期并运行一次查询

您可以使用动态日期范围,而不是带有
表日期范围的固定日期
,这样您就不必编辑查询,您的报告就可以显示最新信息。下面是LegacySQL中的一个示例,其中显示了过去7天的数据:

FROM (TABLE_DATE_RANGE([analytics.order_attribution_], 
DATE_ADD(CURRENT_TIMESTAMP(), -7, 'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY')))
你也可以把这两个词串在一起,一年一年地抓住你需要的几个星期

如果您想将您的任务更改为StandardSQL,您可以这样做,我从上周和去年分别抽出两周时间:

SELECT * 
FROM `analytics.order_attribution_*`
WHERE parse_DATE('%y%m%d', _table_suffix) 
   BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AND 
   DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY) OR   parse_DATE('%y%m%d', _table_suffix)
   BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 372 DAY) AND DATE_SUB(CURRENT_DATE(), INTERVAL 366 DAY)

您可以使用动态日期范围,而不是固定日期,使用
表日期范围
,这样您就不必编辑查询,以便报表显示最新信息。下面是LegacySQL中的一个示例,其中显示了过去7天的数据:

FROM (TABLE_DATE_RANGE([analytics.order_attribution_], 
DATE_ADD(CURRENT_TIMESTAMP(), -7, 'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY')))
你也可以把这两个词串在一起,一年一年地抓住你需要的几个星期

如果您想将您的任务更改为StandardSQL,您可以这样做,我从上周和去年分别抽出两周时间:

SELECT * 
FROM `analytics.order_attribution_*`
WHERE parse_DATE('%y%m%d', _table_suffix) 
   BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AND 
   DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY) OR   parse_DATE('%y%m%d', _table_suffix)
   BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 372 DAY) AND DATE_SUB(CURRENT_DATE(), INTERVAL 366 DAY)

对于那些不熟悉<代码>表日期范围和日期分区的人,您能告诉我们日期分区中使用的列的名称吗?Tim-表日期范围是指您以“\u YYYYMMDD”形式保存的表组。因此,在Gordon的例子中,它将选择[analytics.order_Attributement_20180226]和[analytics.order_Attributement_20180304]之间的所有表。对于我们这些不熟悉
表的日期范围和日期分区的人,您能告诉我们列的名称吗在日期分区?Tim-TABLE_date_范围中使用,用于保存多组表,后缀为“_YYYYMMDD”。因此,在Gordon的示例中,它将选择[analytics.order_Attributement_20180226]和[analytics.order_Attributement_20180304]之间的所有表