首页 新闻 搜索 专区 学院

sqlserver 2008一对一排序查询

0
[已解决问题] 解决于 2012-05-25 11:18

我这个表1有个ID关联另一个表2的ID,但是表1的ID在表2可能有多条数据,我要查询表2中关联表1的最新的一条数据,求解决方案,想了很久想不出高效的,先在次谢过了

sixserve的主页 sixserve | 初学一级 | 园豆:19
提问于:2012-05-08 16:06
< >
分享
最佳答案
0

我假设你table2中表示“最新”字段为dt,这样的话可以用RANK来解决你的问题:

select * from 
(SELECT  a.id,a.dt,
RANK() OVER (PARTITION BY a.id order by a.dt desc) as RANK
FROM  #table2 a join #table1 b on a.id=b.id
) c where rank=1
奖励园豆:5
webaspx | 小虾三级 |园豆:1975 | 2012-05-15 13:34

结果是两个表join 起来的

sixserve | 园豆:19 (初学一级) | 2012-05-15 17:37

@sixserve: 那就增加点table1的字段进去就行了啊。

select * from 
(SELECT  b.*,a.dt,
RANK() OVER (PARTITION BY a.id order by a.dt desc) as RANK
FROM  #table2 a join #table1 b on a.id=b.id
) c where rank=1
webaspx | 园豆:1975 (小虾三级) | 2012-05-17 09:22
其他回答(2)
0

select distinct(*) from b  where id in (select id from a)试试这个。

悟行 | 园豆:12240 (专家六级) | 2012-05-08 17:18

不行 distinct(*)就已经错了,而且这种查寻效率很低

支持(0) 反对(0) sixserve | 园豆:19 (初学一级) | 2012-05-09 08:33
0
select *,(select top 1 * from 表2 where 表1.Id=表2.ID order by 排序字段) from 表1
小材小用 | 园豆:639 (小虾三级) | 2012-05-08 21:17

括号里面的select 不能用*的吧,这样只能查一个字段

支持(0) 反对(0) sixserve | 园豆:19 (初学一级) | 2012-05-09 08:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册