表User_Info记录员工基本信息:
username 用户名 nvarchar
bm 部门 nvarchar
表Ht记录员工合同信息:
ht_s 合同起始日期 DateTime
ht_e 合同终止日期 DateTime
bm 部门 nvarchar
zt 合同审核状态 nvarchar现程序执行查询语名:
select distinct ht.id,ht.ht_s,ht.ht_e,ht.zt,ht.username,user_info.bm,user_info.username from ht,user_info where ht.username=user_info.username and user_info.bm like '%" & BmStr & "%' order by ht.id desc
可以正常的查询出指定部门“BmStr”下员工的所有合同信息,但问题是,员工数量较多(16000以上)大家合同起止日期又不一样且每两年最少有一次合同信息,这样查询下来,得到的是所有员工的全部合同信息,而事实上,我们仅仅要知道的是员工最后一次的合同信息,可有比较好的方法实现?请高手指点!
username 用户名 nvarchar
bm 部门 nvarchar
表Ht记录员工合同信息:
ht_s 合同起始日期 DateTime
ht_e 合同终止日期 DateTime
bm 部门 nvarchar
zt 合同审核状态 nvarchar现程序执行查询语名:
select distinct ht.id,ht.ht_s,ht.ht_e,ht.zt,ht.username,user_info.bm,user_info.username from ht,user_info where ht.username=user_info.username and user_info.bm like '%" & BmStr & "%' order by ht.id desc
可以正常的查询出指定部门“BmStr”下员工的所有合同信息,但问题是,员工数量较多(16000以上)大家合同起止日期又不一样且每两年最少有一次合同信息,这样查询下来,得到的是所有员工的全部合同信息,而事实上,我们仅仅要知道的是员工最后一次的合同信息,可有比较好的方法实现?请高手指点!
inner join (select username,max(ht_s) as ht_s) as a
on ht.username=x.username and ht.ht_s=user_info.ht_s
where user_info.bm like '%" & BmStr & "%' order by ht.id desc
最好把测试数据贴出来,这样我们回贴也方便!
您说的方法调试不能通过啊,请指点!
seu31199113朋友:
测试数据很简单比如
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 已审核
username 用户名 nvarchar
bm 部门 nvarchar
... ... ...表Ht记录员工合同信息:
... ... .......
username 姓名 nvarchar
ht_s 合同起始日期 DateTime
ht_e 合同终止日期 DateTime
zt 合同审核状态 nvarchar
FROM HT,USER_INFO
WHERE (HT.USERNAME,HT.HT_E) IN
(SELECT HT.USERNAME USERNAME,
MAX(HT.HT_E) LAST_HT
FROM HT
GROUP BY HT.USERNAME
)
AND HT.USERNAME=USER_INFO.USERNAME;