如何根据BigQuery中另一个带有日期的列创建新的(日期)列以进行比较日期?

How to create a new (date) column based on another column with date in BigQuery for comparison dates?

提问人:Beefje16 提问时间:11/15/2023 更新时间:11/15/2023 访问量:25

问:

我想创建一个包含特定日期的访问量(Google Analytics)的表格,其中我添加了上一年(减去364天)的访问量来比较这些天。

在第一列中,我提取了日期并将totals.visits添加为会话(有效)。我想添加上一年的日期,这样我就可以用这些日期离开连接第二个表。

我的第一个输出如下:

今年的日期 今年的访问量
2023-01-10 100
2023-01-11 200

我正在尝试检索此结果:

今年的日期 今年的访问量 去年日期 去年的访问量
2023-01-10 100 2022-01-11 150
2023-01-11 200 2022-01-12 210

为了添加去年的日期,我尝试了带有“日期”的 DATE_SUB(),但它不起作用。我收到以下错误;

No matching signature for function DATE_SUB for argument types: STRING, INTERVAL INT64 DATE_TIME_PART. Supported signatures: DATE_SUB(DATE, INTERVAL INT64 DATE_TIME_PART); DATE_SUB(DATETIME, INTERVAL INT64 DATE_TIME_PART); DATE_SUB(TIMESTAMP, INTERVAL INT64 DATE_TIME_PART)

SELECT
  *
FROM (
  WITH
    variable AS (
    SELECT
      '20230110' AS start_date,
      '20230126' AS end_date ) (
    SELECT
      date,
      SUM(totals.visits) AS sessions,
      DATE_SUB(date, INTERVAL 364 DAY) AS date_lastyear
    FROM
      `my_table`,
      variable
    WHERE
      date >= start_date
      AND date <= end_date
    GROUP BY
      date ) ) 

有谁知道如何根据连续的日期使用 DATE_SUB()?或者有任何其他方法可以得到我想要的结果?

SQL Google-BigQuery Google-Analytics 分析 )比较

评论


答:

0赞 Equinox 11/15/2023 #1

让我们来调试

No matching signature for function DATE_SUB for argument types: STRING, INTERVAL INT64 DATE_TIME_PART.

它说没有像 date sub 这样的函数需要字符串和间隔

Supported signatures: DATE_SUB(DATE, INTERVAL INT64 DATE_TIME_PART)

唯一支持的参数是 date 和 internal

因此,您提供的日期列是一个字符串,需要将其转换为日期,以便您可以从中减去 1 年。

你可以这样转换 -SELECT PARSE_DATE("%Y%m%d", date) from my_table