日期:2014-05-18  浏览次数:20383 次

如何在查询结果集中屏蔽相同的行?
问题是这样的
我在数据库中有一个考勤表kqdata,如下:
姓名       部门代码             时间
张三       关务部               13:01
李四       关务部               13:12
王五       关务部               13:13
张三       关务部               13:12


我想得到的查询结果中只要一个张三的记录,如下:
张三       关务部               13:01
李四       关务部               13:12
王五       关务部               13:13

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

create table kqdata(姓名 varchar(10),部门代码 varchar(20),时间 varchar(10))
insert kqdata select '张三 ', '关务部 ', '13:01 '
union all select '李四 ', '关务部 ', '13:12 '
union all select '王五 ', '关务部 ', '13:13 '
union all select '张三 ', '关务部 ', '13:12 '

select * from kqdata a where not exists
(
select 1 from kqdata where 姓名=a.姓名 and 时间 <a.时间
)

/*
姓名 部门代码 时间
---------- -------------------- ----------
张三 关务部 13:01
李四 关务部 13:12
王五 关务部 13:13

(所影响的行数为 3 行)
*/