2017-08-30 74 views
0

我有一个有一个字段包含true和false值的排序表。我要新增每次发生真正价值的时间增量的ID类型字段:BigQuery SQL - 基于条件的增量ID

enter image description here

我怎么会去这样做呢?我可以为组ID存储某种变量,还是需要以某种方式返回查询上一行?

回答

1

您可以使用sum窗口函数和case表达式来执行此操作。

select t.*,sum(case when condition='TRUE' then 1 else 0 end) over(order by somecolumn) as groupid 
from tbl t 
+0

非常感谢:) – apkdsmith

2

消除相对较重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`