sql - 区分 SQL / AWS Athena 和 AWS Quicksight 上的分组行
问题描述
我有关于用户跟踪的数据(用户和会话未排序):
user session cummulative_time_spent
A 1 2
A 1 5
A 1 10
A 2 3
B 5 1
B 5 200
B 6 5
B 6 6
我想创建按会话分组的行所花费的时间。我的预期结果是这样的:
user session cummulative_time_spent duration
A 1 2 2
A 1 5 3
A 1 10 5
A 2 3 3
B 5 1 1
B 5 200 199
B 6 5 5
B 6 6 1
我不知道如何在 SQL (AWS Athena) 或 Quicksight 上做到这一点。
解决方案
正如 GMB 指出的那样,您想要的功能是lag()
. 但是,它具有简化计算的三参数形式:
select t.*,
(cumulative_time_spent -
lag(cumulative_time_spent, 1, cumulative_time_spent) over
(partition by user, session order by cumulative_time_spent)
) as duration
from mytable
推荐阅读
- mysql - 如何通过使用日期和时间以及相同的id获取最新数据?
- html - 在 HTML 的新选项卡中打开链接
- php - Livewire 404:获取 http://localhost/livewire/livewire.js net::ERR_ABORTED 404(未找到)
- android - 使用密码切换显示或隐藏文本
- java - Java MySQL 连接不工作:找不到合适的驱动程序
- excel - 使用“获取值”公式时如何按原样复制日期格式?
- node.js - 如何将我的流星应用程序部署到本地网络中的 Ubuntu 服务器?
- python - 使用报纸从 HTML 中提取图像
- c - 需要帮助,我很新。简单的扫描和打印问题
- haskell - 理解 MonadFix 的滑动规律