我試圖在BigQuery的新標準SQL功能上使用我的MSSQL查詢中的一個,因爲它需要特殊的JOIN條件。但是,該引用不包含BigQuery標準SQL中日期時間函數的任何解釋。BigQuery的標準SQL中的日期和時間函數
到目前爲止,我設法我DATE_ADD聲明 從轉換:DATE_ADD( '2015年1月1日',-13, '月') 到:DATE_ADD( '2015年1月1日',間隔-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,我可以看一下是什麼造成了內部錯誤 –
沒啥嗨,這是** vex-production:bquijob_343984cc_1545ef2e7a4 ** – Wouter
好的,我在調查失敗後更新了答案。 –