欢迎访问服务器技术网-www.fuwuqijishu.com

关于SQL查询语句中去除重复记录的问题!

程序设计 fuwuqijishu 2年前 (2022-10-01) 10次浏览 0个评论 扫描二维码

关于最近公司人事系统新增合同管理模块,遇到一个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,去掉唯一性关键字,其他字段照常,应该就可以了。

喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

Warning: error_log(/www/wwwroot/fuwiqijishu/wp-content/plugins/spider-analyser/#log/log-2606.txt): failed to open stream: No such file or directory in /www/wwwroot/fuwiqijishu/wp-content/plugins/spider-analyser/spider.class.php on line 2900