SQL求助:对一个字段里重复数据,取出不同数据的前两个

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL求助:对一个字段里重复数据,取出不同数据的前两个相关的知识,希望对你有一定的参考价值。

表orderdate如下 求取出 o_id customer 1 bush 3 bush 2 carter 6 carter 5 adams 就是每个custmer取出前两个
我的目的是为了在一个字段里相同的数据只取出前2个其他的忽略掉

参考技术A 我来写个长长的相当复杂的。
select IDENTITY(int,1,1)as xh,customer into #temp1 from orderdate group by customer having count(*)>1
select * into #temp2 from orderdate where customer in (select customer from #temp1 )
select * into #temp3 from #temp2 left join #temp1 where #temp2. customer =#temp1.customer
--先将重复的取出来
create table B(
o_id int,
custmer varchar(255)
)
declare
@X int,
@Y int
select @X=min(xh) from #temp1
select @Y=max(xh) from #temp1
while @X<=@Y
insert into B
select top 2 o_id,custmer from #temp3 where xh=@X
set @X=@X+1
end
select * from B
drop table #temp1
drop table #temp2
drop table #temp3
drop table B
参考技术B select * from (
select *, ROW_NUMBER() over(PARTITION BY customer order by customer ) dd from orderdate) as ff where dd<=2追问

PARTITION BY oracle函数? 能介绍下思路吗 不胜感激

追答

这条语句是在SQL中使用的,你的编译环境是oracle?

追问

我在mysql下查询,报错
SELECT *, ROW_NUMBER() over(PARTITION BY customer ORDER BY customer )dd FROM orderdate这句话报错

追答

哦,oracle不支持ROW_NUMBER() 这个函数,我再想想。

参考技术C select Customer from Orders
where Customer='Adams' or Customer='Carter' or OrderPrice>=700
order by Customer desc
我暂时只能想到这样取巧的方法,我也试过了是可以的。不知道是不是你想要的结果。

数据库sql,重复字段只取其中一行

数据库中的sql,重复字段只取其中一行

格式 : 

select  *  from [表]    where  其他字段  in (select  函数(其他字段)  from [表]  group by 相同字段)
示例如下:

从test表中,取出 username字段相同的记录中,id最大的那一行数据。

select * from test where  id in (select max(id) from test group by  username )


以上是关于SQL求助:对一个字段里重复数据,取出不同数据的前两个的主要内容,如果未能解决你的问题,请参考以下文章

oracle开展分组后,取出每组的前几条数据

THINKPHP怎么查询一张表中某个字段数据重复次数最多的前几名!

【求助】SQL 同一字段不同内容进行分组显示的

sql数据库怎么实现分组并取每组的前1条语句,按日期排序?

sql中如何在where字句里截取某个字段的前几位字符

sql 10多万行的数据 求助