2016-08-05 72 views
1

我必須執行下面的邏輯 我的輸出表應該有每個userid的以下字段。 用戶id,prodid,版本,上次使用時間 - 我將使用MAX(starttime),計算1,其中prodname =過去1天的RX * 10,計算2將在過去7天中爲prodname = RX * 10bigquery multiple where caluse

對於列計算1和計算2,我可以編寫單獨的選擇查詢並在where子句中提供時間段,然後連接,但是在單個查詢中執行此操作的更有效方法是什麼?

SELECT userid, prodID, Version, 
MAX(StartTime) AS Last_Used_TimeStamp, 
FROM 
[ProdTable] 
WHERE NativeProd ='AAA' 
AND GlobalPod='AAA' 
GROUP BY 1,2,3,4 

SELECT userid, COUNT(prodname)*10 AS calculation1 
from [prodtable] 
where prod ='AAA' 
AND Date(startTime) = CURRENT_DATE() -1 
+1

我認爲這已經在http://stackoverflow.com/a/38778582/5221944 –

+0

回答可能重複的[Bigquery - 替代交叉連接](http://stackoverflow.com/questions/38778424/bigquery-替代換交叉聯接) –

回答

2

查詢中存在一些混淆,請確保這兩個查詢中的名稱是一致的。在你的第二個查詢中,我假設你的計數是按用戶ID分組的。在這種情況下,您可以使用SUM(CASE ..)在一個查詢中實現兩種計算。

SELECT userid, 
     SUM(CASE WHEN StartTime >= DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY') THEN 1 ELSE 0 END) AS calculation1, 
     SUM(CASE WHEN StartTime >= DATE_ADD(CURRENT_TIMESTAMP(), -7, 'DAY') THEN 1 ELSE 0 END) AS calculation2 
FROM [ProdTable] 
WHERE prod = 'AAA' 
GROUP BY userid 

另外,如果你想獲得集成查詢Last_Used_TimeStamp與計算查詢的過程中,我想我們可以使用PARTITION BY功能要達到的目標。