我有一个如下所示的表格:
Row | Fullvisitorid | Visitid | New_Session_Flag
1 | A | 111 | 1
2 | A | 120 | 0
3 | A | 128 | 0
4 | A | 133 | 0
5 | A | 745 | 1
6 | A | 777 | 0
7 | B | 388 | 1
8 | B | 401 | 0
9 | B | 420 | 0
10 | B | 777 | 1
11 | B | 784 | 0
12 | B | 791 | 0
13 | B | 900 | 1
14 | B | 904 | 0
我想要做的是,如果它是 fullvisitorid 的第一行,则将该字段标记为 1,否则使用上面的行作为值,但如果 new_session_flag = 1 则使用上面的行加 1,输出示例我正在寻找以下内容:
Row | Fullvisitorid | Visitid | New_Session_Flag | Rank_Session_Order
1 | A | 111 | 1 | 1
2 | A | 120 | 0 | 1
3 | A | 128 | 0 | 1
4 | A | 133 | 0 | 1
5 | A | 745 | 1 | 2
6 | A | 777 | 0 | 2
7 | B | 388 | 1 | 1
8 | B | 401 | 0 | 1
9 | B | 420 | 0 | 1
10 | B | 777 | 1 | 2
11 | B | 784 | 0 | 2
12 | B | 791 | 0 | 2
13 | B | 900 | 1 | 3
14 | B | 904 | 0 | 3
如您所见:
第 1 行为 1,因为这是 fullvisitorid A 第一次出现
第 2 行为 1,因为这不是 fullvisitorid A 第一次出现,并且 new_session_flag <> 1 因此它使用上面的行(即 1)
第 5 行是 2,因为这不是 fullvisitorid A 第一次出现,并且 new_session_Flag = 1,因此它使用上面的行(即 1)加 1
第 7 行是 1,因为这是 fullvisitorid B 第一次出现
等等
我相信这可以通过 SAS 中的 retain
语句来完成,但 Google BigQquery 中是否有等效的语句?
希望以上内容有意义,如果没有,请告诉我。
提前致谢
最佳答案
以下适用于 BigQuery 标准 SQL
#standardSQL
SELECT *,
COUNTIF(New_Session_Flag = 1) OVER(PARTITION BY Fullvisitorid ORDER BY Visitid) Rank_Session_Order
FROM `project.dataset.table`
关于sql - 在 BigQuery 中按组和标记运行计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60907302/