表的查询
如某单位有两个区域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 区域外
------解决方案--------------------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