姓名 工作岗位 生效日期
-------------------------------------------
葛优 行政部人事助理 2003-09-01
.......
冯小刚 生产部副经理 2003-10-21
张艺谋 管理部品管 2003-10-25
.......
葛优 行政部人事经理 2004-01-01
冯小刚 生产部经理 2004-01-01
......
张艺谋 管理部副经理 2004-03-22
......
查询出来的内容就是:
姓名 工作岗位 生效日期
-------------------------------------------
冯小刚 生产部经理 2004-01-01
葛优 行政部人事经理 2004-01-01
张艺谋 管理部副经理 2004-03-22
请注意:因为这个表的输入顺序不一定是按日期前后输入的,因此不能判断同一个人的不同记录输入顺序,因此查询只能按“生效日期”来排列。谢谢!
12 个解决方案
#1
select a.*
from 表 a join(
select 姓名,生效日期=max(生效日期) from 表 group by 姓名
)b on a.姓名=b.姓名 and a.生效日期=b.生效日期
from 表 a join(
select 姓名,生效日期=max(生效日期) from 表 group by 姓名
)b on a.姓名=b.姓名 and a.生效日期=b.生效日期
#2
不用这么麻烦吧!
#3
楼上,
请说说你的想法
学习
请说说你的想法
学习
#4
参考:
name:姓名
num:日期
select name,num=(select top 1 num from emp a where name=b.name order by num desc)
from (select distinct name from emp)b
name:姓名
num:日期
select name,num=(select top 1 num from emp a where name=b.name order by num desc)
from (select distinct name from emp)b
#5
学习更简单的方法,期待ing
#6
zjcxc(邹建)的代码有用。
但我也象 internetcsdn(公元1979年8月10日) 一样好奇,希望能解释一下。让我们学习学习。
internetcsdn(公元1979年8月10日)的代码我不能用啊。
但我也象 internetcsdn(公元1979年8月10日) 一样好奇,希望能解释一下。让我们学习学习。
internetcsdn(公元1979年8月10日)的代码我不能用啊。
#7
顶一下。
#8
楼主:
请问是我的代码有错?
还是效率不高?
请问是我的代码有错?
还是效率不高?
#9
TO:internetcsdn(公元1979年8月10日)
没有能正确执行出来。
没有能正确执行出来。
#10
还可以这样写:(语句比较简洁)
select 姓名,max(工作岗位),max(生效日期) from 表 group by 姓名
select 姓名,max(工作岗位),max(生效日期) from 表 group by 姓名
#11
因为 查询结果 基于 “同一个人对应一个工作岗位” 的假定,这样只需要简单分组就能实现,因为同一组中不同的只是 生效日期
#12
TO: SoarInAir(亮子)
你的代码不能得到一个正确的结果。比如说:我的表中有这样同一个人的信息:
员工编号 员工姓名 工作岗位 生效日期
-------------------------------------------------------------
B159 冯小钢 品质保证部检查组进货检查 2004年3月14日
B159 冯小钢 品质保证部检查组出荷检查工责 2004年4月29日
根据你的代码,会得出一个错误的结果:
B159 冯小钢 品质保证部检查组进货检查 2004年4月29日
事实上,这条查询记录是错误的。但根据zjcxc(邹建)的代码,就能得到正确的结果。我是根据这条记录来判断代码的正确与否的。
你的代码不能得到一个正确的结果。比如说:我的表中有这样同一个人的信息:
员工编号 员工姓名 工作岗位 生效日期
-------------------------------------------------------------
B159 冯小钢 品质保证部检查组进货检查 2004年3月14日
B159 冯小钢 品质保证部检查组出荷检查工责 2004年4月29日
根据你的代码,会得出一个错误的结果:
B159 冯小钢 品质保证部检查组进货检查 2004年4月29日
事实上,这条查询记录是错误的。但根据zjcxc(邹建)的代码,就能得到正确的结果。我是根据这条记录来判断代码的正确与否的。
#1
select a.*
from 表 a join(
select 姓名,生效日期=max(生效日期) from 表 group by 姓名
)b on a.姓名=b.姓名 and a.生效日期=b.生效日期
from 表 a join(
select 姓名,生效日期=max(生效日期) from 表 group by 姓名
)b on a.姓名=b.姓名 and a.生效日期=b.生效日期
#2
不用这么麻烦吧!
#3
楼上,
请说说你的想法
学习
请说说你的想法
学习
#4
参考:
name:姓名
num:日期
select name,num=(select top 1 num from emp a where name=b.name order by num desc)
from (select distinct name from emp)b
name:姓名
num:日期
select name,num=(select top 1 num from emp a where name=b.name order by num desc)
from (select distinct name from emp)b
#5
学习更简单的方法,期待ing
#6
zjcxc(邹建)的代码有用。
但我也象 internetcsdn(公元1979年8月10日) 一样好奇,希望能解释一下。让我们学习学习。
internetcsdn(公元1979年8月10日)的代码我不能用啊。
但我也象 internetcsdn(公元1979年8月10日) 一样好奇,希望能解释一下。让我们学习学习。
internetcsdn(公元1979年8月10日)的代码我不能用啊。
#7
顶一下。
#8
楼主:
请问是我的代码有错?
还是效率不高?
请问是我的代码有错?
还是效率不高?
#9
TO:internetcsdn(公元1979年8月10日)
没有能正确执行出来。
没有能正确执行出来。
#10
还可以这样写:(语句比较简洁)
select 姓名,max(工作岗位),max(生效日期) from 表 group by 姓名
select 姓名,max(工作岗位),max(生效日期) from 表 group by 姓名
#11
因为 查询结果 基于 “同一个人对应一个工作岗位” 的假定,这样只需要简单分组就能实现,因为同一组中不同的只是 生效日期
#12
TO: SoarInAir(亮子)
你的代码不能得到一个正确的结果。比如说:我的表中有这样同一个人的信息:
员工编号 员工姓名 工作岗位 生效日期
-------------------------------------------------------------
B159 冯小钢 品质保证部检查组进货检查 2004年3月14日
B159 冯小钢 品质保证部检查组出荷检查工责 2004年4月29日
根据你的代码,会得出一个错误的结果:
B159 冯小钢 品质保证部检查组进货检查 2004年4月29日
事实上,这条查询记录是错误的。但根据zjcxc(邹建)的代码,就能得到正确的结果。我是根据这条记录来判断代码的正确与否的。
你的代码不能得到一个正确的结果。比如说:我的表中有这样同一个人的信息:
员工编号 员工姓名 工作岗位 生效日期
-------------------------------------------------------------
B159 冯小钢 品质保证部检查组进货检查 2004年3月14日
B159 冯小钢 品质保证部检查组出荷检查工责 2004年4月29日
根据你的代码,会得出一个错误的结果:
B159 冯小钢 品质保证部检查组进货检查 2004年4月29日
事实上,这条查询记录是错误的。但根据zjcxc(邹建)的代码,就能得到正确的结果。我是根据这条记录来判断代码的正确与否的。