SQL时钟数据操作

时间:2012-11-18 15:37:58

标签: sql

我们有一个SQL 2008表,按以下顺序保存出勤数据。

 uid   clock                          collectdate                  type

 1    2012-10-30 16:13:07.000          2012-10-30 19:29:58.000     in
 1    2012-10-30 21:18:50.000          2012-10-30 22:29:58.000     in
 2    2012-10-30 16:13:07.000          2012-10-30 19:29:58.000     in
 2    2012-10-30 21:18:50.000          2012-10-30 22:29:58.000     in

正确的顺序是将“类型”列设为,输入和输出。但这正是我所面临的问题,因为该系统正用于管理承包商和兼职人员,他们总是错过按下正确的按钮,或者在进行打卡或退出打卡之前根本没有按下正确的按钮。

我们目前依赖此存储过程将时钟数据按正确顺序放置

    INSERT INTO attendanceTBL (UID,CollectDate,Clockin,Clockout)

SELECT 
UID
,CollectDate
,MAX(case when type  = 'in' then clock end) clockin
,MAX(case when type  = 'Out' then clock end) clockout
From RAWCLOCKTBL
GROUP BY UID,CollectDate 
RETURN 

有没有什么方法可以将“clock”值以正确的顺序移动到同一行,同时忽略“type”列。即,将上表移至。

uid    clock                          clock            
1      2012-10-30 16:13:07.000        2012-10-30 21:18:50.000
2      2012-10-30 16:13:07.000        2012-10-30 21:18:50.000

1 个答案:

答案 0 :(得分:0)

以下查询将UID和DATE上每个日期和JOIN的UID的IN和OUT时间分组,以获得所需的输出。 LEFT JOIN将确保在没有OUT的情况下返回这些条目(如果需要)。

SELECT 
    A.UID, 
    CONVERT(DATE, clock) 'ClockDate', 
    min(clock) 'ClockIn', 
    max(clock) 'ClockOut'
FROM 
    attendanceTBL 
GROUP BY uid, CONVERT(DATE, clock)