SELECT SUM(DECODE(登陆时长,'2004-6-2',1,0)),SUM(DECODE(登陆时长,'2004-6-10',1,0))
from table
from table
解决方案 »
- Win 7旗舰版能装Oracle 9i Enterprise Edition吗
- ORACLE EXP中QUERY写法问题
- 該如何顯示A資料表與B資料表相同的資料
- 我是新手!碰到了一个关于ORACLE自动启动的问题,请专家帮忙!谢谢了
- 表如何与视图同步 --- 期待解答
- 300分:统计分析问题请教!!
- 在同一张表,同一个动作(如 insert after)建立两个不同的行级触发器和表级触发器,请问哪个先执行?
- oracle 的检索和查询效率的问题,急急急急急急急急!!!! 欢迎大家参与,回答就散分!!
- EXECUTE IMMEDIATE 会自动提交吗
- 菜鸟向学oracle,请各位大侠指点迷津顺便给一些好相关资料下载点。不胜感激!!
- 求oracle下下面sql程序的编写
- XP下Oracle数据库不会自动启动怎么办啊?
他的时间是跨度的,到底需要怎么统计,还需要他说明,是不是说,6/2在登陆时间和退出时间之间,都算呢?还是什么。他都没有说清楚。
AGENT_ID LOGIN_TIME LOGOUT_TIME DURING_TIME
118 2004-06-01 17:24:15 2004-06-02 11:30:08 65153
118 2004-06-02 12:36:59 2004-06-02 14:15:33 5914
118 2004-06-02 14:17:38 2004-06-03 08:42:19 66281
118 2004-06-03 19:08:45 2004-06-04 06:55:18 42393
118 2004-06-06 08:12:50 2004-06-06 20:38:10 44720
118 2004-06-06 15:06:13 2004-06-06 20:38:10 19917
118 2004-06-07 19:31:33 2004-06-08 08:04:20 45167
118 2004-06-07 22:55:22 2004-06-08 08:04:20 32938
118 2004-06-08 08:04:38 2004-06-09 12:08:40 101042
118 2004-06-10 15:25:47 2004-06-10 22:49:31 26624
118 2004-06-11 16:59:09 2004-06-11 21:25:41 15992
118 2004-06-11 21:50:17 2004-06-12 09:19:40 41363 这个表要实现我的要求是有点困难。比如:我要统计6月11号这天的登录时长,涉及到的记录是:
118 2004-6-11 16:59 2004-6-11 21:25 15992
118 2004-6-11 21:50 2004-6-12 9:19 41363
我需要的数据是15992+7783?(2004-6-11 21:50:17到2004-6-11 23:59:59之间的数据)
選擇條件 LOGIN_TIME=2004-6-11 or LOGOUT_TIME=2004-6-11 or (LOGOUT_TIME>2004-6-12 00:00:00 and LOGIN_TIME<2004-6-11 00:00:00)
然後,sum時分4种情況
LOGIN_TIME=LOGOUT_TIME時,就用DURING_TIME
LOGIN_TIME=2004-6-11 LOGOUT_TIME!=2004-6-11,求 2004-6-11 23:59:59和LOGIN_TIME差值
LOGOUT_TIME=2004-6-11 LOGIN_TIME!=2004-6-11 求 2004-6-11 00:00:00和LOGOUT_TIME差值
第4种 == 24*60*60
这个表要实现我的要求是有点困难。比如:我要统计6月11号这天的登录时长,涉及到的记录是:
AGENT_ID LOGIN_TIME LOGOUT_TIME DURING_TIME
118 2004-6-11 16:59 2004-6-11 21:25 15992 --因为字段中没有秒,所以这里不可能是15992
118 2004-6-11 21:50 2004-6-12 9:19 41363
我需要的数据是15992+7783?(2004-6-11 21:50:17到2004-6-11 23:59:59之间的数据)
***************************************************************************************/
select
sum(sum_time) all_time
from
(
--登陆登出如期在同一天的
select
sum(a.during_time) sum_time
from
tablea a
where
1=1
and a.agent_id=118
and to_char(a.login_time,'yyyy-mm-dd')=to_char(a.logout_time,'yyyy-mm-dd')
and a.login_time=你输入的时间参数
union
--两个时间不在同一天的时候.
select
sum((to_date(to_char(b.login_time,'yyyy-mm-dd')||' 23:59' ,'yyyy-mm-dd hh24:mi')-b.login_time)*24*60*60) sum_time
from
tablea b
where
1=1
and b.agent_id=118
and to_char(b.login_time,'yyyy-mm-dd') < to_char(b.logout_time,'yyyy-mm-dd')
and b.login_time=你输入的时间参数
)
--以上没有对跨越两天的进行处理. 即;登陆时间 2004-06-17 12:00 登出时间 2004-06-19 14:00
where 工号='118'
and 登录时间>=to_date('6月2号')
and 登录时间<=to_date('6月11号')select sum(登录时长) from table
where 工号='118'
and 登录时间>=to_date('6月2号')
and 登录时间<=to_date('6月2号')