给定另一个字段的值,SQL 创建一个新的字段会话

奥古斯丁

我在完成以下任务时遇到问题。

给定一个表

|    user_id    |    hit_id    |  new_session |
|---------------|--------------|--------------|
|       1       |       1      |       0      |
|       1       |       2      |       0      |
|       1       |       3      |       1      |
|       1       |       4      |       0      |
|      ...      |      ...     |      ...     |
|       5       |      19      |       0      |

在哪里

  • 的组合user_id,并hit_id是唯一
  • new_session 是一个布尔值,用于确定该点击是否为该特定用户启动了一个新会话

我想创建一个新列,session_number将 hit_ids 拆分为会话,考虑到:

  • 每个的第一行user_id,一旦按顺序排序,hit_id asc新列的值为 1session_number
  • 只要为new_session0,值就session_number保持不变
  • new_session是 1 时,我必须将 1 与实际会话数相加
  • 该逻辑按user_idordered by对分区进行处理hit_id asc,因此一旦user_id发生更改,会话计数将被重置

用一些示例数据创建了一个db-fiddle

user_id = 1(涵盖多个极端情况)的预期输出将是:

|    user_id    |    hit_id    |  new_session | session_number |
|---------------|--------------|--------------|----------------|
|       1       |       1      |       0      |        1       |
|       1       |       2      |       0      |        1       |
|       1       |       3      |       1      |        2       |
|       1       |       4      |       0      |        2       |
|       1       |       5      |       0      |        2       |
|       1       |       6      |       1      |        3       |
|       1       |       7      |       0      |        3       |
|       1       |       8      |       1      |        4       |
|       1       |       8      |       1      |        5       |

我尝试过使用滞后()、排名()和密集排名()的组合,但我总是发现一个使所有尝试都失败的极端情况。此外,我完全确定有一种非常简单的方法,但我没有考虑到。

戈登·利诺夫

您可以使用累积总和:

select pv.*,
       (1 + sum(new_session) over (partition by user_id order by hit_id)) as session_number
from pageviews pv;

是一个数据库小提琴。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL:基于另一个字段的值的条件字段输出

如何根据另一个字段值创建字段类型?

当另一个字段值更改时更新一个字段值

根据另一个字段的值禁用一个字段

根据另一个字段的值在MongoDB中投影一个字段

检查一个字段的值是否在另一个字段中

将setFieldValue用于一个字段,基于另一个字段的值

根据另一个字段更新一个字段

需要一个字段或另一个字段

一个字段基于另一个字段的求和

一个字段的Oracle SQL计数由另一个字段分组

如何将 SQL 查询中一个字段的值用于 Oracle Apex 上另一个字段的值列表?

sql-选择为一个字段记录相同的值,在另一个字段上记录不同的值

SQL仅根据另一个字段的值过滤一个字段的某些值

Microsoft SQL Server:触发以检查由另一个字段分组的一个字段的总和是否不超过特定值?

如何根据另一个字段的值设置输入字段值?

Sql server Pivot并从一个字段创建多个记录并拆分另一个字段

基于Jackson中另一个字段值的条件字段要求?

将空/空字段转换为另一个字段的值

Django模型字段取决于另一个字段的值

Django根据另一个字段的值验证字段

基于另一个字段值的猫鼬隐藏/显示字段

将arrayFilter的字段设置为匹配另一个字段的值

MongoDB使用另一个字段的值添加新字段

如何根据另一个字段计算字段值?

JSON模式条件:根据另一个字段的值,该字段是必需的

根据另一个字段的值验证Django模型字段?

动态字段数取决于另一个字段的值

将字段值附加到另一个字段