sql - 在 Amazon Redshift 的列中获取特定值之后的下一条记录
问题描述
我有一些数据如下:
Session_id,Created_at, pagetype
1,2018-08-08,A
1,2018-08-08,B
1,2018-08-08,C
1,2018-08-08,A
1,2018-08-08,D
1,2018-08-08,A
2,2018-08-18,D
2,2018-08-18,C
2,2018-08-18,A
2,2018-08-18,B
2,2018-08-18,B
在任何给定会话中,只要列Pagetype
中的值为 ,我想获取当前行和下一行。A
即使当前会话中没有下一行,我也想要当前行。所以结果集看起来像这样:
Session_id,Created_at, pagetype
1,2018-08-08,A
1,2018-08-08,B
1,2018-08-08,A
1,2018-08-08,D
1,2018-08-08,A
2,2018-08-18,A
2,2018-08-18,B
我会分享一个初始查询来执行此操作,但我不知道如何开始。我确信有一些窗口功能可用于这项工作。
任何帮助将非常感激。
解决方案
用于lag
获取上一行的值。(假设是created_at
日期时间类型,否则使用不同的列来打破关系以获得稳定的结果)
select *
from (select t.*,lag(pagetype) over(partition by session_id order by created_at) as prev_pagetype
from tbl t
) t
where pagetype = 'A' or (prev_pagetype = 'A' and pagetype <> 'A')
推荐阅读
- python - 如何拆分一串名称和相邻的数字,以便将数字分配给每个相邻的字符串名称?
- angular - 如何等到调用服务构造函数并以角度完成执行
- c++ - 将 PDB(蛋白质数据库)文件直接导入虚幻引擎 4
- excel - 单击操作行后,单元格中的新格式会发生变化
- elasticsearch - 在 Elasticsearch/Lucene 中执行模糊查询时,是否最多创建 n^2 个字符串扩展?
- flutter-layout - 如何在 SliverAppBar Flutter 上自定义搜索栏
- python - 无法使用 Spotify 凭据来预测歌曲
- argo-workflows - 在类似于 Argocd 的 Argo 工作流程中启用对用户的匿名只读访问
- visual-studio - Visual Studio:意外的 PDB 错误;RPC (23)
- c++ - 如何在 C++ 中使用数组而不是向量来读取 .CSV 文件中的数据