首页 > 解决方案 > 复杂的分组案例 - 在组之间使用“分隔 tinyint 标志”

问题描述

以下是相关页面浏览数据集的示例。

呈现的记录按 ASC 顺序按时间戳排序。

在此处输入图像描述

我需要从数据集中计算一些每次会话的度量。

问题是会话没有明确的标识符。唯一可用的是is_a_new_session标志 - 它用作会话之间的一种分隔符。因此,在给定的示例中,有 5 个单独的会话。

如何生成某种会话标识符并将其添加到数据集,以便以后可以将其用于对每个会话进行分组?

所需的新列与此类似: 在此处输入图像描述

标签: sqlpostgresql

解决方案


使用累积和来定义组,然后聚合:

select min(timestamp), max(timestamp), . . .   -- whatever columns you want
from (select t.*,
             sum(is_a_new_session) over (order by timestamp) as grp
      from t
     ) t
group by grp;

推荐阅读