2017-08-24 89 views
0

对不起,我是菜鸟,但需要一些帮助创建此查询:SQL查询重复行+最小值

id | C | S | T 
--- |--- |--- |--- 
1 |C1 |S1 |DA 
2 |C1 |S1 |DA 
3 |C1 |S1 |DB 
4 |C2 |S3 |DA 
5 |C1 |S2 |DC 

需要显示第一行的每一个独特的C(用最小的ID)

所以最终结果将类似于(C1和C2是独特的,C1仅示出第一行作为ID为1):

id | C | S | T 
    --- |--- |--- |--- 
    1 |C1 |S1 |DA 
    4 |C2 |S3 |DA 

你能帮忙吗? 我试图在独特和内部连接周围玩,但不能得到任何好的结果。

回答

1

我会建议row_number()此:

select id, c, s, t 
from (select t.*, row_number() over (partition by c order by id) as seqnum 
     from t 
    ) t 
where seqnum = 1 
1

使用ROW_NUMBER()功能与分区中,您将能够创建组,这将给排数字,基于在C柱开始1 to n值各组。要选择第一行,您可以使用RowNum = 1;

With TableCTE 
As 
(
SELECT id, C, S, T, ROW_NUMBER()(Partition by C Order by Id) as RowNum 
From TableName 
) 

SELECT * FROM TableCtE 
WHERE RowNum = 1; 
-1

您可以与所有其他列

SELECT MIN(id), 
     C, 
     MIN(S), 
     MIN(T) 
    FROM table 
GROUP BY C 

结果

id C S T 
1 C1 S1 DA 
4 C2 S3 DA 
+1

分钟式T的最小的和的MIN组他们被C将导致每列中的最小值不必然与最低ID相关的值。 – xQbert

+0

在我脑海中处理完查询后,是的,你是对的。 –