2014-10-07 89 views
0

我得到的数据得到两条记录的每个用户ID的SQL查询

1 34 abc5 
1 24 abc3 
1 12 abc2 
1 24 abc1 
1 34 abc6 
1 34 abc76 
1 24 ab1c243 
1 24 abc243 
1 34 abc243 
1 34 abc243 

从我的查询..有什么办法让输出这样

我的查询

SELECT * FROM table2 
WHERE (abc2 IN (SELECT * FROM table3 AS f INNER JOIN 
table1 AS u ON u.id_usr = f.userLogedin_id 
WHERE  (u.id_usr = '13'))) AND (publish_status = '3') 
ORDER BY guser_ID 

1 34 abc5 
1 34 abc6 
1 24 abc3 
1 24 abc1 
1 12 abc2 

即orderby desc和限制为每个独特用户2 ..在这种情况下,34,24和12是唯一用户

+1

我们能否看到您的查询? ) – jbutler483 2014-10-07 10:40:05

+0

添加我的查询plz chk – 2014-10-07 10:42:14

回答

2

试试这个..

with cte as 
(
select row_number() over (partition by <col2> order by <col2> desc) as id, col1,col2,col3 from <tablename> 
) 
select * from cte where id<=2 
+1

更改您的订单也由于用户需要最高col2值的记录 – Murtaza 2014-10-07 10:43:57

+0

也可以使用这是SQL 2005及更高版本 – Murtaza 2014-10-07 10:44:45

+0

您可以使它更多清楚..使用我的变量。 – 2014-10-07 10:47:07

0
declare @t table (id int,value int,name varchar(10)) 
insert into @t (id,value,name)values (1,34,'abc5') 
insert into @t (id,value,name)values (1,24,'abc3') 
insert into @t (id,value,name)values (1,12,'abc2') 
insert into @t (id,value,name)values (1,24,'abc1') 
insert into @t (id,value,name)values (1,34,'abc6') 
insert into @t (id,value,name)values (1,34,'abc76') 
insert into @t (id,value,name)values (1,24,'ab1c243') 
insert into @t (id,value,name)values (1,24,'abc243') 
insert into @t (id,value,name)values (1,34,'abc243') 
insert into @t (id,value,name)values (1,34,'abc243') 

SELECT t.* 
FROM (
     SELECT DISTINCT value 
     FROM @t 
     ) tt 
CROSS APPLY 
     (
     SELECT TOP 2 * 
     FROM @t t 
     WHERE t.value = tt.value 
     ORDER BY 
       1 DESC 
     ) t