首页 新闻 会员 周边

SQL查询问题

0
[待解决问题]

表中外键有重复的,想根据Time列字段将外键重复的列进行排序获取出时间最近的那一行数据之后再把外键没有重复的数据行全部添加上,请问怎么获取?谢谢啦~~~~

杰调科蜜的主页 杰调科蜜 | 菜鸟二级 | 园豆:210
提问于:2013-01-08 09:44
< >
分享
所有回答(3)
0

select max(Time),外键字段 from t

group by 外键字段

chenping2008 | 园豆:9836 (大侠五级) | 2013-01-08 09:51
0

先获取获取重复数据的最近一行

再union all 其他不重复数据

select top 1 外键字段 from t
where 外键字段 in (select 外键字段 from t group by 外键字段 Having COUNT(*)>1)
order by time
union all
select 外键字段 from t
where 外键字段 in (select 外键字段 from t group by 外键字段 Having COUNT(*)=1)

或者不使用Union,自行先返回“重复数据的最近一行”,再除去重复数据的编号查询不重复数据,再合并效率会高些

滴答的雨 | 园豆:3660 (老鸟四级) | 2013-01-08 10:06
0

 

首先使用row_number() over (partition by 外键字段 order by 时间 desc),然后将row_number大于1的选择出来,作为子查询。

selec *

from(

select *,row_number() over (partition by 外键字段 order by 时间 desc) as ‘排名’

from 表名)

as T

where 排名 > 1

这样既可以选择出只有一个记录的行,又可以选择出多行记录组中时间最近的记录。

 

mengfeig | 园豆:179 (初学一级) | 2013-01-08 10:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册