如某单位有两个区域A、B,某人员甲、乙刷卡流水如下:
乙 12:00:00 出 B
乙 12:20:00 出 A
甲 13:00:00 进 A
甲 13:30:00 进 B
乙 13:42:00 进 A
乙 15:00:00 出 A
甲 15:35:00 出 B
那查询A区域情况,
编号 姓名 班级 性别 最后刷卡时间 在校情况
      甲             13:00:00   区域内
      乙             15:00:00   区域外查询B区域情况,
编号 姓名 班级 性别 最后刷卡时间 在校情况
      甲             15:35:00   区域外
      乙             15:00:00   区域外

解决方案 »

  1.   

    create table #(uName nvarchar(10),uDatetime Datetime,state nvarchar(10),flag nvarchar(10))
    insert into # select '乙','2007-08-16 12:00:00','出','B'
    insert into # select '乙','2007-08-16 12:20:00','出','A'
    insert into # select '甲','2007-08-16 13:00:00','进','A'
    insert into # select '甲','2007-08-16 13:30:00','进','B'
    insert into # select '乙','2007-08-16 13:42:00','进','A'
    insert into # select '乙','2007-08-16 15:00:00','出','A'
    insert into # select '甲','2007-08-16 15:35:00','出','B'--A
    select b.uName,b.uDatetime,state = (case b.state when '出' then '区域外' else '区域内' end) 
    from (
    select uName,uDatetime = max(uDatetime) 
    from # where flag = 'A' group by uName) a
    left join # b on a.uName= b.uName and a.uDatetime = b.uDatetime--B
    select b.uName,b.uDatetime,state = (case b.state when '出' then '区域外' else '区域内' end) 
    from (
    select uName,uDatetime = 
    (case when max(uDatetime) > (select uDateuDatetime = max(uDatetime) from # where flag = 'A' and uName = a.uName)
    then max(uDatetime) else (select uDateuDatetime = max(uDatetime) from # where flag = 'A' and uName = a.uName) end)
    from # a where flag = 'b' group by uName) a
    left join # b on a.uName= b.uName and a.uDatetime = b.uDatetime