【发布时间】:2016-04-30 02:09:39
【问题描述】:
我试图在 BigQuery 的新标准 SQL 功能上使用我的一个 MSSQL 查询,因为它需要特殊的 JOIN 条件。但是,该参考文献尚未包含对 BigQuery 标准 SQL 中日期时间函数的任何解释。
到目前为止,我设法转换了我的 DATE_ADD 语句 来自:DATE_ADD('2015-01-01', -13, 'MONTH') 至:DATE_ADD('2015-01-01', INTERVAL -13 MONTH)
我还将 YEAR(x) 转换为 EXTRACT(YEAR FROM x)。两者似乎都是类似 MySQL 的语句。
最后我注意到大多数日期函数的输出必须使用 TIMESTAMP 进行转换,然后才能进行比较。
但现在我的查询终于要运行了,我得到一个“内部错误”。有谁知道可能出了什么问题?这是查询:
SELECT
M,
Bought12MBeforeM,
Bought12MBeforeAndInM,
(Bought12MBeforeAndInM * 1.0) / (Bought12MBeforeAndInM + Bought12MBeforeM) AS RepurchaseRate
FROM (
SELECT
M,
COUNT(DISTINCT CASE WHEN MaxM < TIMESTAMP(M) THEN user_id ELSE NULL END) AS Bought12MBeforeM,
COUNT(DISTINCT CASE WHEN MaxM >= TIMESTAMP(M)
AND MinM < TIMESTAMP(M) THEN user_id ELSE NULL END) AS Bought12MBeforeAndInM
FROM (
SELECT
M,
user_id,
MAX(cart_creation_date) AS MaxM,
MIN(cart_creation_date) AS MinM
FROM (
SELECT
user_id,
cart_creation_date
FROM
`vex-eu-cloud-sql-001.work_user.flat_orders`
WHERE
cart_creation_date >= TIMESTAMP(DATE_ADD('2015-01-01', INTERVAL -13 MONTH))
GROUP BY
user_id,
cart_creation_date ) UniqueCarts
INNER JOIN (
SELECT
DATE(Day) AS M
FROM
`vex-custom.wouter.days_2007_2020`
WHERE
EXTRACT(YEAR
FROM
Day) >= 2015
AND EXTRACT(DAY
FROM
Day) = 1
AND Day < TIMESTAMP(CURRENT_DATE()) ) Months
ON
cart_creation_date > TIMESTAMP(DATE_ADD(M, INTERVAL -13 MONTH))
AND cart_creation_date < TIMESTAMP(DATE_ADD(M, INTERVAL 1 MONTH))
GROUP BY
M,
user_id ) BoughtInM
GROUP BY
M ) Results
【问题讨论】:
-
如果您提供工作 ID,我可以查找导致内部错误的原因
-
嗨 Mosha,这是 vex-production:bquijob_343984cc_1545ef2e7a4
-
好的,我在调查失败后更新了答案。
标签: google-bigquery