sql - 在 BigQuery 中按组和标记运行计数?

标签 sql google-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 第一次出现

    等等

我相信这可以通过 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/

相关文章:

mysql - 需要澄清 SQL 中 JOIN 的概念

mysql - SQL 获取所有只包含一种商品的订单

sql - 将sql server连接设置为只读?

c# - 如何避免慢速查询造成的死锁

sql - BigQuery 模运算符 (%) 在 WHERE 子句中不起作用

google-analytics - 无法将 LAG 或 LEAD 的结果转换为整数

google-bigquery - 在哪里提交 BigQuery 的新功能请求?

sql - 我可以在一个语句中删除两个表中的条目吗?

python - 全局名称 'bigquery' 未定义

google-bigquery - Bigquery 如何从数据流中删除记录