SQL选择唯一元素并在两个时段

时间:2017-07-25 17:01:28

标签: sql google-bigquery

假设我们有一个看起来像这样的表:

enter image description here

我希望能够看到在period1和period2期间有多少URL记录。

其中句号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中添加第二列?

任何想法都会非常感激。对不起,如果我解释不正确。

3 个答案:

答案 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

答案 1 :(得分:1)

for BigQuery Standard 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

答案 2 :(得分: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

来自test t group by url;

您可以在上面的查询中正确替换日期范围。

提供SQL脚本来创建表并填充数据总是有帮助的。