sql - 通过连接获取两个值之间的时间
问题描述
我的数据库示例:
ID APP USER_ID SESSION_ID LOCAL_TIME CONTEXT ACTION VALUE
141 App1 userID1 session1 2019-07-18 Player Name PlayerName1
141 App1 userID1 session1 2019-07-18 Player XP 486
141 App1 userID1 session2 2019-07-18 App BuildNum 11184
452 App1 userID4 session1 2019-07-18 Player Name PlayerName2
452 App1 userID4 session1 2019-07-18 State Start PlayerName2
452 App1 userID4 session1 2019-07-18 State End PlayerName2
我想做的是找到Context = state
,action = end
和Context = state
,之间的总action = start
时间SESSION_ID
。
我需要寻找第action = end
一个的原因是因为只有在他们留在比赛结束时才会记录 end 。
我遇到的问题是这两个值是相同的上下文和动作实体的一部分,我对 EAV DB 不是很好。
所需数据示例:
SESSION_ID Play Length of session (Time between action=start & action=End
23 32
215 16
352 51
感谢您提供的所有帮助,我非常感谢,我希望这已经足够清楚了。小心。
解决方案
请尝试以下查询。它使用max()
带有过滤器的 来确定要从带有action
of的记录中减去什么End
。
with playtimes as (
select session_id,
case
when action = 'End'
then local_time - max(local_time)
filter (where action = 'Start')
over (partition by session_id
order by local_time)
else null
end as session_length
from your_table
where context = 'State'
and action in ('Start', 'End')
group by session_id
)
select session_length,
round(extract(epoch from session_length) / 60) as session_minutes
from playtimes
where session_length is not null;
推荐阅读
- mysql - 通过 unixODBC 在 SuSE Linux 上的 Lotus Notes Server-Agent 中从 MariaDB 读取和写入 LONGTEXT
- java - MediaPlayer onCompletion 未调用并与 seekbar 问题
- swift - 从日历选择器中删除添加日历按钮
- tomcat - 跨数据中心多台虚拟机的Tomcat会话复制(Cross data center session replication using tomcat)
- javascript - How to display a div as overlay in between the margin of the div contents on hover
- javascript - 在尝试由于 .NET MVC 中的 Ajax 提供 toastr 消息时,我在控制台中收到错误“Uncaught SyntaxError: Unexpected identifier”
- json - 如何根据 ComboBox1 中的文本执行代码?
- r - 如何将data.frame头行收集到向量?
- reactjs - × 错误:对象作为 React 子对象无效(找到:[object Promise])。如果您打算渲染一组孩子,请改用数组
- r - R:以不同的顺序将两个数据帧与字符串合并