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

查询过滤重复问题,如何可以过滤重复时,取ID较大的值?
有这样的查询语句 
SELECT * FROM TABLEA WHERE ID IN (1,2) 

得到的结果为 
ID VALUE 
1 A 
1 B 
1 C 
1 D 

2 C 
2 D 
2 E 
2 F 


怎么可以把结果过滤成 

1 A 
1 B 
2 C 
2 D 
2 E 
2 F 

即过滤相同的, ID取较大的

------解决方案--------------------
select max(id) id , value TABLEA WHERE ID IN (1,2) group by value
------解决方案--------------------
我楼上写错了,更改为如下:
SQL code
create table TABLEA(ID int, VALUE varchar(10))
insert into TABLEA values(1 ,'A')  
insert into TABLEA values(1 ,'B')  
insert into TABLEA values(1 ,'C')
insert into TABLEA values(1 ,'D')
insert into TABLEA values(2 ,'C')
insert into TABLEA values(2 ,'D')
insert into TABLEA values(2 ,'E')
insert into TABLEA values(2 ,'F')
go

--如果只有id,value这两列,则可以直接分组取最大。
select max(id) id , value from TABLEA WHERE ID IN (1,2)  group by value
/*
id          value      
----------- ---------- 
1           A
1           B
2           C
2           D
2           E
2           F

(所影响的行数为 6 行)
*/

--如果不止id,value这两列,则如下:、
select t.* from TABLEA t WHERE ID IN (1,2) and id = (select max(id) from tablea where value = t.value and id in (1,2)) order by t.value
/*
id          value      
----------- ---------- 
1           A
1           B
2           C
2           D
2           E
2           F

(所影响的行数为 6 行)
*/
select t.* from TABLEA t WHERE ID IN (1,2) and not exists (select 1 from tablea where value = t.value and id in (1,2) and id > t.id) order by t.value
/*
id          value      
----------- ---------- 
1           A
1           B
2           C
2           D
2           E
2           F

(所影响的行数为 6 行)
*/

drop table tablea