2017-08-30 99 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`