日期:2014-05-18  浏览次数:20874 次

SQL如何去掉查询结果的重复数据?
select top 10 a from ta order by b desc.
目的是取出依照b排序的a数据 其中b是不会重复的查询出的a是重复的,如何去掉!
例如 以下数据
a b
我 1
我 2
你 3
他 4
她 5
她 6
需要得到的数据是




这样的顺序!

------解决方案--------------------
SQL code
select a,max(b) as mb from ta order by max(b)

------解决方案--------------------
探讨

SQL code
select a,max(b) as mb from ta order by max(b)

------解决方案--------------------
select distinct a from ta order by b desc


------解决方案--------------------

这个问题看似简单,其实挺复杂的,我也没想出来。还是等下面高手来解答的吧。
------解决方案--------------------
探讨
select top 10 a
from ta t
where not exists(select 1 from ta where a = t.a and b > t.b)
order by b desc
这样可以 但是查询时间过长,可以优化吗?谢谢大家

------解决方案--------------------
探讨
select top 10 a
from ta t
where not exists(select 1 from ta where a = t.a and b > t.b)
order by b desc
这样可以 但是查询时间过长,可以优化吗?谢谢大家

------解决方案--------------------
SQL code
declare @tb table (a nvarchar(12),b int)
insert @tb  
select '我',1 union all
select '我',2 union all
select '你',3 union all
select '他',4 union all
select '她',5 union all
select '她',6

select a from (
select  top (100) ROW_NUMBER() over(PARTITION by a order by a desc)rn ,a,b  from @tb group by a,b order by b desc) aa
where rn=1
/*
a
她
他
你
我
*/

------解决方案--------------------
select a from ta group by a order by max(b) desc
------解决方案--------------------
CREATE TABLE tmp AS SELECT MIN(b) as id FROM ta GROUP BY a;
DELETE FROM ta WHERE id NOT IN (SELECT id FROM tmp )
DROP TABLE tmp

然后 select * from ta order by b desc
------解决方案--------------------
select a,max(b) 
from ta
group by a
order by b desc

酱紫不可以吗?
------解决方案--------------------
distinct
------解决方案--------------------
SQL code

CREATE TABLE TEST2
(
    Name VARCHAR(10),
    Id INT
)
GO

INSERT INTO TEST2
SELECT '我',1 UNION
SELECT '我',2 UNION
SELECT '你',3 UNION
SELECT '他',4 UNION
SELECT '她',5 UNION
SELECT '她',6



SELECT NAME
FROM TEST2
GROUP BY Name
ORDER BY MAX(ID) DESC

------解决方案--------------------
distinct
------解决方案--------------------
select top 10 a from( select distinct a,max(b) as b from ta group by b) table_A order by b desc 

------解决方案--------------------
探讨
select top 10 a from ta order by b desc.
目的是取出依照b排序的a数据 其中b是不会重复的查询出的a是重复的,如何去掉!
例如 以下数据
a b
我 1
我 2
你 3
他 4
她 5
她 6
需要得到的数据是




这样的顺序!

------解决方案--------------------
之前在英文系统里,写错了。。
------解决方案--------------------