2017-08-30 5 views
0

に基づいてインクリメントIDは、私は真と偽の値を含む一つのフィールドでソートされたテーブルを持っています。私はこれを行うに行くかどうBigQueryのSQL - 条件

enter image description here

:私は真の値が発生するたびにインクリメントIDタイプフィールドを追加したいですか?私は、グループIDのための変数のいくつかの種類を格納することができますか私は何とか戻って前の行を照会する必要があるでしょうか?

答えて

1

あなたはこれを行うにはcase式でsumウィンドウ関数を使用することができます。あなたは、これは以下のようにあなたのダミーデータを使用して再生することができますたとえば、以下の

#standardSQL 
SELECT *, COUNTIF(condition) OVER(ORDER BY pos) AS groupid 
FROM `yourTable`  

のようにcountifを使用することができます - 比較的重いsum(case when ...)を排除する

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

グレート、ありがとう:) – apkdsmith

2

#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`