最近公司人事系統新增合同管理模塊,遇到一個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,去掉唯一性關鍵字,其他字段照常,應該就可以了。

熱心網友

按員工分組,即 group by 員工,Group by要寫在Order by之前,然后在合同日期字段上用聚集函數MAX,去掉唯一性關鍵字,其他字段照常,就可以了。

熱心網友

能不能用 max(ht_s), int的可以, DateTime不知道行不行

熱心網友

有點麻煩,我也等待答案。