2017-08-30 4 views
0

Ich habe eine sortierte Tabelle mit einem Feld, das wahre und falsche Werte enthält. Ich möchte ein ID-Typ-Feld hinzufügen, die jedes Mal ein wahrer Wert auftritt, erhöht:BigQuery SQL - Inkrement-ID basierend auf der Bedingung

enter image description here

Wie würde ich über das tun dies gehen? Kann ich eine Art Variable für die Gruppen-ID speichern oder muss ich die vorherige Zeile irgendwie abfragen?

Antwort

1

Sie können die Fensterfunktion sum mit einem Ausdruck case verwenden, um dies zu tun.

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

Großartig, danke :) – apkdsmith

2

zu beseitigen relativ schwer sum(case when ...) - Sie countif wie im folgenden Beispiel

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

Sie dies mit Ihrer Dummy-Daten wie in unten spielen können, verwenden können.

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