SQL时钟数据操作

SQL时钟数据操作,sql,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

我们有一个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 uid时钟日期类型 1 2012-10-30 16:13:07.000 2012-10-30 19:29:58.000英寸 2012-10-30 21:18:50.000 2012-10-30 22:29:58.000英寸 2012-10-30 16:13:07.000 2012-10-30 19:29:58.000英寸 2012-10-30 21:18:50.000 2012-10-30 22:29:58.000英寸 正确的顺序是将“类型”列设为、输入和输出。但这正是我所面临的问题,因为该系统正被用来管理承包商和兼职人员,他们总是错过按下正确的按钮,或者根本没有按下时钟上的按钮,然后才进行输入或输出打孔

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

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 插入attendanceTBL(UID、CollectDate、Clockin、Clockout) 挑选 液体 ,收集日期 ,最大值(类型为'in'然后为时钟结束时的情况)时钟输入 ,最大值(类型为'Out'然后为时钟结束时的情况)时钟停止 来自RAWCLOCKTBL 按UID、日期分组 返回 是否有任何方法可以在忽略“type”列的同时,以正确的顺序将“clock”值移动到同一行。把上面的桌子移到

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 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
以下查询对每个日期的UID的输入和输出时间进行分组,并连接UID和日期以获得所需的输出。左联接将确保返回这些条目而不返回OUT(如果需要)


可能只是我,对不起。但是,您所需的输出与按uid从attendanceTBL组中选择uid、MIN(时钟)、MAX(时钟)有什么不同?这将给出每日最小、最大时间的整个日期时间跨度的结果。这与选择uid、转换(日期、时钟)'ClockDate',MIN(时钟)'ClockIn',MAX(时钟)不一样吗按uid从attendanceTBL组“ClockOut”,转换(日期,时钟)?这不处理尚未注销的情况,@Dems。它似乎返回与您完全相同的结果。例如,如果给定日期只有一行,则
a
B
将返回相同的值。目前,这将计算
MIN
,然后计算
MAX
,并将它们连接在一起;这是
A
B
之间唯一的区别。由于
GROUP BY
是相同的,因此没有
JOIN
WHERE
子句,只有
MIN/MAX
发生了变化,单独计算它们似乎不会改变任何事情……感谢大家的解决方案!。。如何通过排除typeid范围来扩展查询?即,typeid包含范围为H01、H02、,。。。到H24,这些值表示。H01=时钟输入,H02=时钟输出,H03=前门输入,依此类推。如何仅排除H01和H02。
SELECT 
    A.UID, 
    CONVERT(DATE, clock) 'ClockDate', 
    min(clock) 'ClockIn', 
    max(clock) 'ClockOut'
FROM 
    attendanceTBL 
GROUP BY uid, CONVERT(DATE, clock)