有一个表,用来记录员工打卡时间
3个字段
分别是id,type,timeid,员工ID,
type,类别,有2种,进门和出门。
time,时间。主键是id+time。
即,这个表中,一个ID会有N条记录。现在想查出每个ID最早的进门时间和最晚的出门时间。即每个ID有一条记录,每条记录有3个字段。
id,in_time,out_time。
请问如果查出?

解决方案 »

  1.   

    select id,
    min(case when type='进门' then time end) as in_time,
    max(case when type='出门' then time end) as out_time,
    from 有一个表
    group by id
      

  2.   

    select a.id,in_time,out_time from 
    (select id,min("time") in_time from tb where type = '进门' group by id) a,
    (select id,max("time") out_time from tb where type = '出门' group by id) b
    where a.id = b.id;
      

  3.   

    select a.id,a.in_time,b.out_time from 
    (select id,min(time) in_time from tab
    where type='进门'
    group by id) a,
    (select id,min(time) out_time from tab
    where type='出门'
    group by id) b
    where a.id=b.id;这个可以么,没验证过。
      

  4.   


    select t.* from tb_minjob t
    DATETIME        ID     TYPE
    2009-12-15 13:52:21 1 IN
    2009-12-15 16:00:48 1 OUT
    2009-12-15 16:04:48 1 OUT
    2009-12-15 16:08:48 2 IN
    2009-12-15 13:52:21 2 OUT
    2009-12-16 11:52:21 1 IN
    2009-12-16 13:52:21 1 IN
    2009-12-16 18:00:48 1 OUTSELECT T.ID,
    T.TYPE,
    (CASE WHEN T.TYPE='IN' THEN MIN(DATETIME) ELSE MAX(DATETIME) END) AS DATEIME
    FROM tb_minjob t
    GROUP BY T.ID,T.TYPE,TO_CHAR(DATETIME,'YYYY-MM-DD')ID TYPE DATEIME
    1 IN 2009-12-15 13:52:21
    1 IN 2009-12-16 11:52:21
    1 OUT 2009-12-15 16:04:48
    1 OUT 2009-12-16 18:00:48
    2 IN 2009-12-15 16:08:48
    2 OUT 2009-12-15 13:52:21
      

  5.   

    想求2个时间差的小时数round(to_number(out_time-int_time)*24)。我是这样算的,但是round是四舍五入
    想问下,oracle有没有进一的计算?