• 主页
  • 基础类
  • 应用实例
  • 新技术前沿

求一个SQL 语句,关于在一个用户的多条任职记录中找出时间最新的那条任职记录

zjlsct 2010-01-05 06:50:08
表构成 : 记录id,用户id,任职开始时间,任职结束时间,职务。
一个用户可以有多条任职记录,最新那条为当前任职记录

要找出所有用户或某个用户最新的那条也就是当前的任职记录,这个SQL 查询该什么写呢
...全文
236 点赞 收藏 10
写回复
10 条回复
huangkemin 2010年01月18日
采用not exists那个方法的话,不知道会不会遇到过这种问题(我是在oracle下使用),如果任职开始时间 > t.任职开始时间(为null),则这条null的记录也会被筛选出来。不知道sql-server是否有这个问题,我的解决方法最后在条件里过滤掉时间为null的记录了。建议楼主注意下。

推荐用not exists方法,比max方法快很多
回复 点赞
ACMAIN_CHM 2010年01月05日
参考N=1的情况

http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
分组取最大N条记录方法

回复 点赞
dawugui 2010年01月05日
[Quote=引用楼主 zjlsct 的回复:]
表构成 : 记录id,用户id,任职开始时间,任职结束时间,职务。
一个用户可以有多条任职记录,最新那条为当前任职记录

要找出所有用户或某个用户最新的那条也就是当前的任职记录,这个SQL 查询该什么写呢
[/Quote]
[Quote=引用 6 楼 zjlsct 的回复:]
看不懂,各位老大解释一下思路吧,人笨
[/Quote]
--1
select t.* from tb t where 任职开始时间 = (select max(任职开始时间) from tb where 用户id = t.用户id)

--2
select t.* from tb t where not exists(select 1 from tb where tb where 用户id = t.用户id and 任职开始时间 > t.任职开始时间)

--3
--这个你应该能看懂了.
select m.* from tb m,
(select 用户id , max(任职开始时间) 任职开始时间 from tb group by 用户id) n
where m.用户id = n.用户id and m.任职开始时间 = n.任职开始时间

实际上1,2和3的意思是一样的.
回复 点赞
--小F-- 2010年01月05日
以4楼为例
子查询
select max(任职开始时间) from tb where 用户id=t.用户id
与外面tb表本身对比
查询出用户ID相同 任职开始时间最大的记录
回复 点赞
zjlsct 2010年01月05日
看不懂,各位老大解释一下思路吧,人笨
回复 点赞
kasin000 2010年01月05日

create proc sp_test
@userId int
as
select
t.*
from
表 t
where
not exists(select 1 from 表 where 用户id=t.用户id and 任职开始时间>t.任职开始时间)
And(t.userid=@userid or isnull(@userid,'')='')

回复 点赞
--小F-- 2010年01月05日
select 
*
from
tb t
where
任职开始时间=(select max(任职开始时间) from tb where 用户id=t.用户id )
回复 点赞
--小F-- 2010年01月05日
select 
*
from
tb t
where
任职开始时间=(select max(任职开始时间) from t where 用户id=t.用户id )
回复 点赞
SQL77 2010年01月05日
select 
t.*
from
表 t
where
任职开始时间=(select MAX(任职开始时间) from 表 where 用户id=t.用户id )
回复 点赞
子陌红尘 2010年01月05日

select
t.*
from
表 t
where
not exists(select 1 from 表 where 用户id=t.用户id and 任职开始时间>t.任职开始时间)
回复 点赞
发动态
发帖子
MS-SQL Server
创建于2007-09-28

1.4w+

社区成员

25.3w+

社区内容

MS-SQL Server相关内容讨论专区
社区公告
暂无公告