sql - 如何使用过分区
问题描述
我有这张桌子:
ID BS time
1 1 14:10:00
1 1 14:10:05
1 1 15:04:03
1 2 16:18:05
1 2 17:00:09
1 3 18:33:50
1 1 19:03:14
1 1 19:10:23
并且除了:
ID BS start_time end_time
1 1 14:10:00 16:18:05
1 2 16:18:05 18:33:50
1 3 18:33:50 19:03:14
1 1 19:03:14 19:10:23
我尝试使用铅,但我不知道如何解决问题,当 BS 在结束后重复时
SELECT id,bs,time,--min(time) time_start,
lead(time,1) over (partition by id order by time) next_time,
FROM `sage-facet-114619.Temp_data.temp_table`
order by id,time
之后我会考虑分组,但我对同样的 BS 有问题
解决方案
下面是 BigQuery 标准 SQL (实际上返回预期结果 - 这不是其他两个答案的情况)
#standardSQL
SELECT id, bs,
MIN(time) AS start_time,
MAX(IFNULL(end_time, time)) AS end_time
FROM (
SELECT id, bs, time, end_time,
COUNTIF(flag) OVER(PARTITION BY id ORDER BY time) AS grp
FROM (
SELECT *,
LEAD(time) OVER win AS end_time,
bs != LAG(bs) OVER win AS flag
FROM `sage-facet-114619.Temp_data.temp_table`
WINDOW win AS (PARTITION BY id ORDER BY time)
)
)
GROUP BY id, bs, grp
如果应用于您问题的样本数据 - 输出是
Row id bs start_time end_time
1 1 1 14:10:00 16:18:05
2 1 2 16:18:05 18:33:50
3 1 3 18:33:50 19:03:14
4 1 1 19:03:14 19:10:23
推荐阅读
- matlab - 在 MATLAB 中使用 ODE45 求解三个偏微分方程
- keras - 将神经网络的输出限制在 0 和 1 之间,同时也可以精确地具有 0 和 1
- oracle - 结合 Oracle CONTEXT 索引和基于函数的索引
- python - discord.py bot 未加入频道
- reactjs - 使用 React 中的 Hooks 将状态组件替换为功能组件
- javascript - 如何捕获一个错误并在控制台登录呢?角打字稿
- haskell - 需要 category-extras,但堆栈配置没有指定版本
- google-places-api - Google Places API:获取餐厅类型
- python - 如何计算numpy数组元素?
- javascript - 将多行动态添加到数据表