2017-07-25 69 views
1

比方說,我們有一個表,看起來像這樣:SQL選擇獨特的元素,並將它們與上兩期

enter image description here

我希望能夠看到間隔1和間隔2中有多少網址記錄有。

其中週期1是「日期>‘2016年1月1日’和日期<‘2017年1月1日’」

和週期2是「日期>‘2014年1月1日’和日期< 「2015年1月1日」「

這裏是我的期望是什麼可視化:

enter image description here

我可以很容易地使用下面的查詢單個期間做到這一點:

SELECT URL, COUNT(URL) as Period1 
FROM table WHERE date < '2017-01-01' 
AND date > '2016-01-01' GROUP BY URL 

但是,如何添加Period2的第二列?

任何想法將不勝感激。對不起,如果我不正確地解釋自己。

回答

1

爲BigQuery的標準SQL

#standardSQL 
SELECT 
    URL AS uri, 
    COUNTIF(date BETWEEN '2016-01-01' AND '2016-12-31') AS Period1, 
    COUNTIF(date BETWEEN '2014-01-01' AND '2014-12-31') AS Period2 
FROM `LogFilesv2_Dataset.DE_Visits` 
GROUP BY URL 
+0

非常感謝你很多,米沙,你是最棒的! –

2

只需更改日期在下面的查詢,它將計算命中每期

SELECT [URL] 
,SUM(CASE WHEN (date >= '12/22/2015' And date <='12/23/2015') THEN 1 Else 0 END) 
,SUM(CASE WHEN (date > '12/30/2015' And date < '12/31/2015') THEN 1 Else 0 END) 
FROM LogFilesv2_Dataset.DE_Visits 
Group by URL 
+0

我真的很好奇 - 爲什麼投了錯誤的答案(S)!?最近有這麼多這樣的案例! :o( –

+1

我的,壞的,其實是SUM,不是 –

+0

這個答案(編輯版本)也能返回正確的輸出,據我所知。非常感謝你,拉斐爾,我真的很感謝你的努力! –

0

不知道你正在使用的數據庫。但對於Oracle數據庫,您可以嘗試使用像這樣的標量子查詢。

select url,(select count(*) from test where url=t.url and date_col <= sysdate and date_col > sysdate-20) period1,(select count(*) from test where url=t.url and date_col <= sysdate and date_col > sysdate-40) period2 

from test t group by url;

您可以在上面的查詢中適當地替換日期範圍。

提供SQL腳本來創建表並填充數據總是有幫助的。

相關問題