BigQuery中如何获取指定行下方首个type为T的count值?
解决BigQuery中V类型行取下方首个T类型行count值的问题
问题分析
你当前的FIRST_VALUE写法错误在于排序逻辑:把所有type=T的行强制排在前面,导致返回的是整个分区内最早出现的T类型行count,而非当前行下方的首个T类型行count。
正确SQL写法
SELECT group_id, person_id, type, position, count, FIRST_VALUE(CASE WHEN type = 'T' THEN count ELSE NULL END) OVER ( PARTITION BY group_id, person_id ORDER BY position ASC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) AS new_count FROM `your-project.your-dataset.your-table`;
逻辑说明
- 分区与排序:按
group_id和person_id分区,确保只在同一组内查找;按position升序排列,保证行顺序是从上到下的原始顺序。 - 过滤有效值:用
CASE WHEN将非T类型行的count转为NULL,这样FIRST_VALUE会自动跳过这些NULL值,找到当前行到末尾范围内第一个非NULL的count值(即下方首个T类型行的count)。 - T类型行处理:T类型行的
CASE会返回自身的count,因此new_count与原count一致,符合需求。
内容的提问来源于stack exchange,提问作者akiratheL
相关产品推荐
相关产品推荐

