有一个表,用来记录员工打卡时间
3个字段
分别是id,type,timeid,员工ID,
type,类别,有2种,进门和出门。
time,时间。主键是id+time。
即,这个表中,一个ID会有N条记录。现在想查出每个ID最早的进门时间和最晚的出门时间。即每个ID有一条记录,每条记录有3个字段。
id,in_time,out_time。
请问如果查出?
3个字段
分别是id,type,timeid,员工ID,
type,类别,有2种,进门和出门。
time,时间。主键是id+time。
即,这个表中,一个ID会有N条记录。现在想查出每个ID最早的进门时间和最晚的出门时间。即每个ID有一条记录,每条记录有3个字段。
id,in_time,out_time。
请问如果查出?
min(case when type='进门' then time end) as in_time,
max(case when type='出门' then time end) as out_time,
from 有一个表
group by id
(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;
(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;这个可以么,没验证过。
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
想问下,oracle有没有进一的计算?