关于最近公司人事系统新增合同管理模块,遇到一个SQL查询语句问题,具体见下文。表User_Info记录员工基本信息:username 用户名 nvarcharbm 部门 nvarchar… … …表Ht记录员工合同信息:… … …….username 姓名 nvarcharht_s 合同起始日期 DateTimeht_e 合同终止日期 DateTimezt 合同审核状态 nvarchar-------------------------------------测试数据 user_info表: 张三 行政部 李四 电脑部 王五 财务部 ht表: 1 张三 2004-1-1 2004-12-31 已审核 2 张三 2005-1-1 2006-12-31 已审核 3 李四 2004-1-1 2004-12-31 已审核 4 李四 2005-1-1 2005-06-30 已审核 5 王五 2004-1-1 2004-06-30 已审核 6 王五 2004-7-1 2006-12-31 已审核----------------------------------------现程序执行查询语名:select distinct , _s, _e,ht.zt, ername,user_ ,user_ ername from ht,user_info where ername=user_ ername and user_ like ‘%” & BmStr & “%’ order by desc可以正常的查询出指定部门“BmStr”下员工的所有合同信息,但问题是,员工数量较多(16000以上)大家合同起止日期又不一样且每人每年最少有一次合同信息,这样查询下来,得到的是所有员工的合同信息,而事实上,我们仅仅要知道的是员工最后一次的合同信息,可有比较好的方法实现?也有笨的方法实现,但问题是每查询出一条结果都要和已经有的结果做比较,先比较合同信息中员工姓名是否同名,如同名则比较合同信息中合同结束日期,如此下来,效率很差还有一个办法是改表的结构,增加一个标志字段,每次登记新合同的时候找出此人的旧合同信息加以区分,以后每次只查找有标志的记录就好了,但问题是库里面已经有三万条数据。请高手指点!的问题
先按员工分组,即 group by 员工(你的字段是哪个? ername?),Group by要写在Order by之前,然后在合同日期字段上用聚集函数MAX,去掉唯一性关键字,其他字段照常,应该就可以了。