首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查询以分析登录数据并智能识别工作的班次。

查询以分析登录数据并智能识别工作的班次。
EN

Stack Overflow用户
提问于 2014-11-11 03:08:43
回答 1查看 75关注 0票数 1

我有一个大型Vertica表,用于跟踪企业范围内几乎所有用户的活动。有一个子集的用户,我想确定他们每天工作的时间。最棘手的一点是,有些用户每周工作12小时,每天工作数天。有人能提出最好的方法吗?我最初是这么想的:

代码语言:javascript
运行
复制
select users.max_hour - users.min_hour as shift_length, 
       timestamp_trunc(activity_dt_tm ,'ddd')
       (select username, 
               ceil(max(hour(activity_dt_tm))) as max_hour, 
               floor(min(hour(activity_dt_tm))) as min_hour
          from user_activity 
          where timestamp_trunc(activity_dt_tm ,'ddd') = '2014/11/10'
          group by username
       ) users

我将查看该查询的结果,并查看哪些用户的轮班时间低于至少8个小时的阈值,这表明他们可能从下午开始工作到第二天。一旦我有了这个用户名列表,我就会将它们传递到第二个查询中,该查询将展望第二天,并获取活动数据行的最大时间,并将其替换为“max_time”。我不是sql专家,但我认为这可能需要一些临时表来传递数据。如果有人能为我指明正确的方向,我将不胜感激。

编辑

这里有一个,它为两个用户提供了一些阶段性数据。http://sqlfiddle.com/#!2/4ce900

User2具有正常的8-5个工作日活动.User1在晚上7点左右开始工作,直到第二天才开始工作。我希望输出看起来像这样:

代码语言:javascript
运行
复制
UserName | Shift Start | Shift End | Hours Worked
-------------------------------------------------
User1    | 7PM         | 7AM       | 12
User2    | 8AM         | 5PM       | 9

我想把所有的工作时间都归因于用户开始轮班的那天。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-11 18:58:11

您可以使用下面的SQL查找用户中断的开始、结束和持续时间。然后,您可以过滤超过阈值的中断,并使用它们来分离用户的轮班。

代码语言:javascript
运行
复制
select t1.username, t1.end_dt_tm beforeBreak, t2.start_dt_tm afterBreak, t2.start_dt_tm - t1.end_dt_tm as diff 
from user_activity t1, user_activity t2
where t1.username = t2.username and t2.start_dt_tm = 
(
  select min(nxt.start_dt_tm) from user_activity nxt 
  where nxt.username = t1.username and nxt.start_dt_tm > t1.end_dt_tm
)
;

(请注意,您的小提琴对用户1有两次相同的行)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26856830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档