从没有光标的多个输入中选择行

时间:2018-07-25 08:20:25

标签: sql oracle

小介绍。

我有两个表,其中一个称为date_time,列date_time_key包含15分钟的unix格式的时间戳 第二个表代理包含用户的数据,包括login_time和logout_time。

我的问题是。我可以创建15分钟的统计信息来记录有多少用户吗? 目前,我能够从date_time获取Unix时间戳列表。并分别从第二个表中获取登录和注销时间。

select date_time_key from date_time
where label_date = '2018-07-23';


select start_time, end_time from agents;

希望您能理解, 感谢您的帮助

编辑:

表date_time以15分钟为步长以unix纪元格式(1532510096)包含时间戳。

我希望输出为

Date Time Count_of_agents
2018-07-24 10:00 20 
2018-07-24 10:15 22
etc .. 

4 个答案:

答案 0 :(得分:0)

假设date_time_key,start_time,end_time是日期格式,要获取所有座席信息,您可以执行以下操作:

select a.*,
b.date_time_key
from agents a,
date_time b
where start_time <= b.date_time_key
and end_time >= b.date_time_key

如果date_time_key是字符格式的时间戳,则您需要对其进行格式化,在oracle中,它看起来像这样:

select a.*,
b.date_time_key
from agents a,
date_time b
where a.start_time <= TO_DATE(b.date_time_key,'YYYYMMDDHH24MISS')
and a.end_time >=  TO_DATE(b.date_time_key,'YYYYMMDDHH24MISS')

该SQL未经测试且考虑到oracle函数,请提供更多详细信息,以了解如果使用的rdbms不能帮助您

答案 1 :(得分:0)

如果我理解正确,则需要从Unix纪元转换为日期/时间格式。如果是这样:

select dt.dte, count(*)
from (select dt.*,
             (timestamp '1970-01-01 00:00:00') + date_time / (24 * 60 * 60) as dte
      from date_time dt
     ) dt left join
     agents a
     on dte >= login_time and dte <= logout_time
where dt.label_date = '2018-07-03'
group by dt.dte
order by dt.dte;

答案 2 :(得分:0)

类似

SELECT a.date_time_key unixdate,count(*) count_of_agents
FROM date_time a, agents b
WHERE b.end_time>=a.date_time_key and b.start_time<=a.date_time_key+15*60
GROUP BY by a.date_time_key

如何将unixtime转换为可以在Internet上找到的oracle日期。这是example

答案 3 :(得分:0)

谢谢您的回答。最后,我创建了自己的解决方案。

简体:

with X as 
(
   -- get all 15 minutes timestamps i want 
   select start_time, end_time
   from agents
   where start_time > 1532476903 and end_time <  1532559703
)

select label_date, count(label_date)
from date_time 
-- join agent to date_time table if timestamp lies between agents login and logout
right join X on X.start_time < dt.date_time_key   
and X.end_time > dt.date_time_key
group by label_date
order by label_date

这不是有效或美观的解决方案,但可以正常工作