我的SQL查询没有得到更令人满意的结果

时间:2016-10-04 03:02:56

标签: sql sql-server-2008 sql-server-2008-r2

enter image description here

这是我的考勤表checktype 0用作intime,1用作时间, 我希望时间为checktype = 0的intime和checktype = 1的outtime的时间 根据日期进行单次输入,所有empid顺序将按升序进行 对于checktype 0和降序为checktype 1

我想要下面的类型结果

enter image description here

2 个答案:

答案 0 :(得分:1)

这是为每位员工每天选择最短的维修时间和最长的停机时间的方法:

select min(case when checktype = 0 then time end) min_intime,
    max(case when checktype = 1 then time end) max_outtime,
    empid,
    date
from mytable
group by empid, date

答案 1 :(得分:1)

在这种情况下,我们可以使用OUTER APPLY为选择设置不同的集合:

select 
    min(t.time) inTime,
    max(t1.time) outTime,
    t.empid,
    t.date
from table1 t
outer apply(select time from table1 t1 where t.empid = t1.empid 
            and t1.checktype = 1) t1
where t.checktype = 0
group by t.empid, t.date