SQL查询不同的行+最小值

时间:2017-08-24 18:58:09

标签: sql distinct

很抱歉是noob,但在创建此查询时需要一些帮助:

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   
你能帮帮忙吗? 我尝试玩不同的内部连接,但不能得到任何好的结果。

3 个答案:

答案 0 :(得分: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 :(得分:1)

通过分区使用ROW_NUMBER()功能,您将能够创建组,这些组将根据以1 to n开头的C列中的值为每个组提供行号。要选择第一行,您可以使用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;

答案 2 :(得分:-1)

您可以使用C对所有其他列的MIN进行分组

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