当处理大型会话数据表时,我遇到了两种情况。我想在满足特定条件的会话中获得第一个事件(或者有时很简单的第一个事件)。在大多数情况下,我希望从该事件中获取特定的列。
表可能看起来像这样。
session_id, timestamp, column1, column2 ... columnn
xyz, datetime_1, attribute1_a, attribute2, ... attribute n
xyz, datetime_2, attribute1_b, attribute2, ... attribute n
已经讨论了一些方法here,并且在一定程度上here也有讨论。
我真的很喜欢窗口函数方法,因为我发现阅读起来很清楚,即类似于ROW_NUMBER() OVER(PARTITION BY session_id ORDER BY timestamp) AS first_created
。我对此不满意的是,它需要一个外部查询,在此必须以first_created = 1
为条件。此外,对于大量数据,此操作将失败。
in中提到的内部联接方法很好用,但也有点令人费解。由于该帖子是前一阵子的,所以我想知道是否已经找到了一种更轻松的方法来实现所需的结果。