日期:2014-05-17  浏览次数:20623 次

一个mssql的查询问题
数据库的表是这样子的:

--签到/签退记录表
CREATE TABLE CHECKINOUT (               
USERID INT NOT NULL ,                              --员工ID号     
CHECKTIME DATETIME NOT NULL DEFAULT GETDATE(),     --签到/签退时间  
CHECKTYPE VARCHAR (1) NULL DEFAULT 'I',            --签到/签退标志:I-签到,O-签退
VERIFYCODE INT NULL DEFAULT 0,                     --验证方式:除256的余数表示签到的方式: 0-密码;1-指纹;2-卡。大于256表示该记录已经被确认,在于处理时不进行处理
SENSORID VARCHAR (5) NULL,                         --采集数据的考勤终端/设备ID
        CONSTRAINT USERCHECKTIME PRIMARY KEY (USERID, CHECKTIME)
)


这是一张记录员工考勤的表,签到和签退时间是一个字段
我现在想查询出的结果的格式如下:
员工id   签到时间  签退时间
(注:签到时间和签退时间必须是同一天的。)


我写的是这样子的:

-- id相等
-- table1.checktype='I' table2.checktype='O'
-- date匹配同一天
select cio1.userid,cio1.checktime,cio2.checktime 
from checkinout cio1,checkinout cio2 
where cio1.userid = cio2.userid
and cio1.checktype='I'
and cio2.checktype='O'
and --该如何进行日期的匹配呢?

------解决方案--------------------


-- id相等
-- table1.checktype='I' table2.checktype='O'
-- date匹配同一天
select cio1.userid,cio1.checktime,cio2.checktime 
from checkinout cio1,checkinout cio2 
where cio1.userid = cio2.userid
    and cio1.checktype='I'
    and cio2.checktype='O'
    and year(cio1.DATETIME) = year(cio2.DATETIME) 
    and month(cio1.DATETIME) = month(cio2.DATETIME) 
    and day(cio1.DATETIME) = day(cio2.DATETIME)





我有个问题哈,只签到不签退的怎么处理,只签退不签到的怎么处理