作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想计算滑动时间范围内的事件数。
例如,假设我想知道在过去 1000 秒内有多少人对 Google 股票 (GOOG) 出价。
我正在尝试以下查询:
SELECT
symbol,
start_date,
start_time,
bid_price,
count(if(max(start_time)-start_time<1000,1,null)) over (partition by symbol order by start_time asc) cnt
FROM [bigquery-samples:nasdaq_stock_quotes.quotes]
where symbol = 'GOOG'
逻辑如下:分区窗口(按交易品种)以投标时间排序(为简单起见,不考虑投标日期)。对于每个窗口(由窗口“头部”处的行定义),我想计算 start_time 小于“头部”行时间 1000 秒的行数。
我正在尝试使用 max(start_time) 获取窗口中的第一行。这似乎不起作用,我得到一个错误:
Error: MAX is an analytic function and must be accompanied by an OVER clause.
是否可以在一列中有两个分析函数(在本例中为 count 和 max)?是否有不同的解决方案来解决所提出的问题?
最佳答案
尝试使用range 函数。
SELECT
symbol,
start_date,
start_time,
bid_price,
count(market_center) over (partition by symbol order by start_time RANGE 1000 PRECEDING) cnt
FROM [bigquery-samples:nasdaq_stock_quotes.quotes]
where symbol = 'GOOG'
order by 2, 3
我将 market_center 用作计数器,也可以使用其他字段。
注意:BigQuery 查询引用中未记录 RANGE 函数,但它是一个标准的 SQL 函数,在这种情况下似乎有效
关于google-bigquery - BigQuery - 计算滑动时间范围内的事件数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27017036/
我是一名优秀的程序员,十分优秀!