0
我有一个有一个字段包含true和false值的排序表。我要新增每次发生真正价值的时间增量的ID类型字段:BigQuery SQL - 基于条件的增量ID
我怎么会去这样做呢?我可以为组ID存储某种变量,还是需要以某种方式返回查询上一行?
我有一个有一个字段包含true和false值的排序表。我要新增每次发生真正价值的时间增量的ID类型字段:BigQuery SQL - 基于条件的增量ID
我怎么会去这样做呢?我可以为组ID存储某种变量,还是需要以某种方式返回查询上一行?
您可以使用sum
窗口函数和case
表达式来执行此操作。
select t.*,sum(case when condition='TRUE' then 1 else 0 end) over(order by somecolumn) as groupid
from tbl t
消除相对较重sum(case when ...)
- 你可以在例如
countif
#standardSQL
SELECT *, COUNTIF(condition) OVER(ORDER BY pos) AS groupid
FROM `yourTable`
你可以用这个来使用你的虚拟数据如下玩。
#standardSQL
WITH `yourTable` AS (
SELECT TRUE AS condition, 1 AS `group`, 1 AS pos UNION ALL
SELECT FALSE, 1, 2 UNION ALL
SELECT FALSE, 1, 3 UNION ALL
SELECT TRUE, 2, 4 UNION ALL
SELECT FALSE, 2, 5 UNION ALL
SELECT FALSE, 2, 6 UNION ALL
SELECT FALSE, 2, 7 UNION ALL
SELECT TRUE, 3, 8 UNION ALL
SELECT FALSE, 3, 9 UNION ALL
SELECT TRUE, 4, 10 UNION ALL
SELECT TRUE, 5, 11 UNION ALL
SELECT FALSE, 5, 12 UNION ALL
SELECT FALSE, 5, 13 UNION ALL
SELECT FALSE, 5, 14
)
SELECT *, COUNTIF(condition) OVER(ORDER BY pos) AS groupid
FROM `yourTable`
非常感谢:) – apkdsmith