sql - 在 BigQuery 中按组和标志运行计数?
问题描述
我有一个如下所示的表格:
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
等等
我相信这可以通过retain
SAS 中的语句来完成,但在 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`
推荐阅读
- javers - 如何通过实体类的属性值而不是javers中的id进行过滤?
- javascript - REST GET 数组 - 如何处理错误?
- c++ - 如何从 Swift 到 Objective c++ 到 c++ 发送(和接收)非常大的浮动数组,然后备份到 Swift?
- unity3d - 如何在不统一使用物理库的情况下检测圆和矩形之间的碰撞(因为本作业不允许这样做)
- clang - 如何将#pragma clang 属性推送与 C++ 命名空间一起使用?
- python - 在 Python Plotly 中是否有与直方图分箱等效的条形图?
- asp.net-core-mvc - 在 Auth0 注销中指定自定义返回 URL 会产生错误
- python - 在 render_template 中嵌套 for、for、if 循环
- python - Python直接从包中导入函数
- google-cloud-platform - 无法在 GCP 上创建 pytorch cpu 映像