sql - 需要帮助计算与特定条件匹配的列中的值之间的差异
问题描述
我有一个包含以下列的表格:
- 行动
- 文章类型
- 队列ID
- 地位
- 票号
- 时间戳
我需要为 articletype = "OUT" 和 action = "CREATE_ARTICLE" 的每一行计算其时间戳值与 articletype = "IN" 和 action = "CREATE_ARTICLE" 的行的前一个时间戳值之间的差异票证编号。
所以我需要知道从我收到消息(articletype =“IN”)到我发送回复(articletype =“OUT”)的时间,每张票经过了多少时间。动作 = “CREATE_ARTICLE”。应该计算两个连续时间戳之间的差异。
谢谢!
解决方案
使用max()
带有过滤器的窗口articletype = 'IN'
:
select *,
case
when articletype = 'OUT'
then timestamp
- max(timestamp) filter (where articletype = 'IN')
over (partition by ticketid
order by timestamp)
else null
end
from table1
where action = 'ARTICLE_CREATE'
and articletype in ('IN', 'OUT');
窗口的默认未指定记录范围是rows between unbounded preceding and current row
.
只处理相关数据。
推荐阅读
- bash - 为什么传递的参数在我的 shell 脚本中不起作用?
- ios - 为什么某些用户没有更新 VueJS 商店?
- php - 使用php将PDF文件上传到mysql数据库
- javascript - 从电子表格单元格中提取特定数据并填充相应的单元格
- python - return 语句在函数内部的 if 语句中的位置
- javascript - inmutable.js List().reverse() 函数的时间复杂度是多少?
- javascript - 打开模态/对话框的 Vuetify Datepicker
- mysql - B+树分支因子的谜题
- javascript - 初始加载时画布网格被压扁,调整网页窗口大小后自动调整为方形网格
- android - Kotlin 中的奇怪值比较问题,“===”返回 true,但“==”返回 false