【发布时间】:2020-11-14 00:25:27
【问题描述】:
我正在尝试根据登录会话的用户数据编写报告。
我需要能够获得从第一个人加入会议到最后一个人离开的完整会话时间。
- 当有人加入会议时,会记录为“初始化-加载视频聊天窗口”
- 有 2 种方法可以关闭会议,但有一种方法正在记录。 - 有一个用户可以使用的“结束聊天”按钮,记录为“视频聊天-结束聊天” - 如果用户不使用该按钮而只是退出程序/浏览器,则数据库不会记录它,我想使用 logType 列中最后记录的元素。
这是我的查询:
select vl.originalChatSessionID,
CONVERT(DATE, min(vl.ReceivedDateTime)) as VideoDate,
--CONVERT(TIME, min(vl.ReceivedDateTime)) as StartTime,
min(vl.ReceivedDateTime) as StartTime2,
--CONVERT(TIME, max(vl.ReceivedDateTime)) as EndTime,
max(vl.ReceivedDateTime) as EndTime2,
DATEDIFF(MINUTE, min(vl.ReceivedDateTime), max(vl.ReceivedDateTime)) as SessionLength
from iclickphrDxvideolog vl
--inner join iclickphrDxVideoHistory vh
-- on vl.originalChatSessionID = vh.meetingid
-- and vl.applicationUserID = vh.applicationUserID
where originalChatSessionID = @MeetingSessionID
--and (vl.logType = 'Initialize-Load Video chat Window' or vl.logType = 'Video Chat-End Chat')
group by originalChatSessionID
问题是我正在获取 logType 列中的第一个记录元素和最后一个记录元素,我知道这一点。如果我取消注释 where 子句中所说的部分; --and (vl.logType = 'Initialize-Load Video chat Window' or vl.logType = 'Video Chat-End Chat'),那么我对会话的开始时间没有问题....但是有会话结束时间的一个大问题。
下图是原始数据的样子:
【问题讨论】:
-
您可能应该查看一些
partition over查询和/或子查询。 -
您说您当前的方法存在问题,其中第二个“where 条件”被评论,但您没有说明为什么该方法不可接受/它有什么问题。据我了解您的问题,您正在尝试获取特定呼叫的最早和最新活动,而这种方法似乎可以满足这一点。
-
@GB 我提到当我从 where 条件中取消注释时,结束时间会变得混乱。因为如果我在数据库中没有“视频聊天结束聊天”日志,它不会抓取 logType 列中的最后一项,因为我只通过“初始化加载视频聊天窗口”和“视频”过滤该列聊天结束聊天”....但这会破坏 EndTime。这有意义吗?
-
@Marc 我试图做一个子查询但失败了。我是 sql 新手,所以想弄清楚。我从来没有使用过分区。你能解释一下如何使用它吗?
-
您是否正在尝试获取特定呼叫的最早和最新活动?如果是,您当前的查询(忘记注释位)似乎可以做到这一点。我错过了什么?
标签: sql reporting-services timestamp reportbuilder3.0