0

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

uid 时钟 collectdate 类型

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

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

我们目前依靠这个存储过程来将时钟数据按正确的顺序排列

    插入到出席TBL(UID,收集日期,打卡,打卡)

选择
用户标识符
,收集日期
,MAX(类型 = 'in' 然后时钟结束的情况)时钟
,MAX(类型 = 'Out' 然后时钟结束的情况)时钟输出
来自 RAWCLOCKTBL
按 UID 分组,收集日期
返回

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

uid 时钟            
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
4

1 回答 1

0

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

SELECT 
    A.UID, 
    CONVERT(DATE, clock) 'ClockDate', 
    min(clock) 'ClockIn', 
    max(clock) 'ClockOut'
FROM 
    attendanceTBL 
GROUP BY uid, CONVERT(DATE, clock)
于 2012-11-18T15:47:03.857 回答