提问人:Beefje16 提问时间:11/15/2023 更新时间:11/15/2023 访问量:25
如何根据BigQuery中另一个带有日期的列创建新的(日期)列以进行比较日期?
How to create a new (date) column based on another column with date in BigQuery for comparison dates?
问:
我想创建一个包含特定日期的访问量(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()?或者有任何其他方法可以得到我想要的结果?
答:
让我们来调试
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
评论