BigQuery 选择时间间隔内的数据
Posted
技术标签:
【中文标题】BigQuery 选择时间间隔内的数据【英文标题】:BigQuery select data within a time interval 【发布时间】:2015-04-27 14:53:49 【问题描述】:我的数据看起来像
名称|从 | To_City |申请日期
安迪|巴黎 |伦敦| 2014 年 8 月 21 日 12:00
莉娜 |科隆 |柏林 | 2014 年 8 月 22 日 18:00
安迪|巴黎 |伦敦 | 2014 年 8 月 22 日 06:00
丽莎 |罗马 |尼尔 | 2014 年 8 月 25 日 18:00
莉娜 |罗马 |伦敦 | 2014 年 8 月 21 日 20:00
丽莎 |罗马 |尼尔 | 2014 年 8 月 24 日 18:00
安迪|巴黎 |伦敦| 2014 年 8 月 25 日 12:00
我想知道一个人在 +/- 一天内有多少相同的驱动请求。我很想收到一张桌子,上面写着:
名称|从 | To_City |平均请求日期 | # 个请求
安迪|巴黎 |伦敦| 2014 年 8 月 21 日 21:00 | 2
莉娜 |科隆 |柏林 | 2014 年 8 月 22 日 18:00 | 1
丽莎 |罗马 |尼尔 | 2014 年 8 月 25 日 06:00 | 2
莉娜 |罗马 |伦敦 | 2014 年 8 月 21 日 20:00 | 1
安迪|巴黎 |伦敦| 2014 年 8 月 25 日 12:00 | 1
这将是 group by 子句的结果。但是,编写这样一个条件来检查在初始请求后的 24 小时内是否存在以及有多少相同的请求,通常是否可行? 到目前为止,我在 Excel 中下载数据并在那里进行操作,但是数据很多,因此效率不高...
样本数据:
让我们先构建一个示例数据集:
select * from (select 'Andy' as name,'Paris' as f,'London' as to, '2014-08-21 12:00' as date),
(select 'Lena' as name,'Koln' as f,'Berlin' as to, '2014-08-22 18:00' as date),
(select 'Andy' as name,'Paris' as f,'London' as to, '2014-08-22 06:00' as date),
(select 'Lisa' as name,'Rome' as f,'Neapel' as to, '2014-08-25 18:00' as date),
(select 'Lena' as name,'Rome' as f,'London' as to, '2014-08-21 20:00' as date),
(select 'Lisa' as name,'Rome' as f,'Neapel' as to, '2014-08-24 18:00' as date),
(select 'Andy' as name,'Paris' as f,'London' as to, '2014-08-25 12:00' as date)
【问题讨论】:
【参考方案1】:一种方法是在 RANGE 窗口中使用窗口函数。为此,需要将第一个日期转换为天数,因为 RANGE 要求排序列是连续数字。 PARTITION BY 子句类似于 GROUP BY - 它列出了定义“相同”驱动器请求的列(在您的情况下 - 名称,从和到)。然后您可以简单地使用 COUNT(*) 来计算该窗口内的天数。
select name, f, to, date, count(*)
over(partition by name, f, to
order by day
range between 1 preceding and 1 following) from (
select name, f, to, date, integer(timestamp(date)/1000000/60/60/24) day from
(select 'Andy' as name,'Paris' as f,'London' as to, '2014-08-21 12:00' as date),
(select 'Lena' as name,'Koln' as f,'Berlin' as to, '2014-08-22 18:00' as date),
(select 'Andy' as name,'Paris' as f,'London' as to, '2014-08-22 06:00' as date),
(select 'Lisa' as name,'Rome' as f,'Neapel' as to, '2014-08-25 18:00' as date),
(select 'Lena' as name,'Rome' as f,'London' as to, '2014-08-21 20:00' as date),
(select 'Lisa' as name,'Rome' as f,'Neapel' as to, '2014-08-24 18:00' as date),
(select 'Andy' as name,'Paris' as f,'London' as to, '2014-08-25 12:00' as date))
【讨论】:
【参考方案2】:您可以截断日期以排除小时、分钟和秒。然后按该列分组
SELECT SUBSTR(STRING(date-of-request), 0, 9) AS day
FROM t1
GROUP BY day
【讨论】:
以上是关于BigQuery 选择时间间隔内的数据的主要内容,如果未能解决你的问题,请参考以下文章