SELECT SUM(DECODE(登陆时长,'2004-6-2',1,0)),SUM(DECODE(登陆时长,'2004-6-10',1,0))
 from table

解决方案 »

  1.   

    nunchakus(双节棍) ,你是典型的看错题目的。她的日期不是[登陆时长],最后的那一列,才是,全是数字。目前还不清楚他的需求到底是什么。
    他的时间是跨度的,到底需要怎么统计,还需要他说明,是不是说,6/2在登陆时间和退出时间之间,都算呢?还是什么。他都没有说清楚。
      

  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之间的数据)
      

  3.   

    因爲對oracle函數部熟,所以提供一個思路。
    選擇條件 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
      

  4.   

    /**************************************************************************************
    这个表要实现我的要求是有点困难。比如:我要统计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
      

  5.   

    select sum(登录时长) from table 
    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号')