T-SQL查找第一次出现的唯一组合

时间:2015-11-30 19:23:08

标签: sql sql-server tsql unique

我有一张看起来像这样的表

Log_ID  User_ID  Line   Attribute
1       A        1      **** 
1       B        2      ****
1       B        3      ****
2       C        1      ****
2       C        2      ****
2       A        3      ****
2       B        4      ****

对于每个Log_ID,User_ID和Line中有多个值。 (Log_ID,Line)将始终是唯一的,但(Log_ID,User_ID)将不会。

我正在尝试返回唯一的(Log_ID,User_ID)对,其中最低的Line值是决胜局。结果集如下所示:

Log_ID  User_ID  Line   Attribute
1       A        1      ****
1       B        2      ****
2       C        1      **** 
2       A        3      ****
2       B        4      ****

我尝试过的任何事都没有奏效。我保持独特(Log_ID,User_ID,Line)三元组或仅获取Line = 1的行。

除了Log_ID,User_ID和Line之外,我还需要表中的其他属性,所以我不能只使用SELECT DISTINCT

有什么想法吗?我发现的解决方案通常假设我正在尝试加入到表中,并且我想加入最低匹配。但这是我的主要表格。

谢谢!

1 个答案:

答案 0 :(得分:2)

此类优先级可以充分利用row_number()

select t.*
from (select t.*,
             row_number() over (partition by log_id, user_id
                                order by line) as seqnum
      from t
     ) t
where seqnum = 1;

编辑:

也可以通过加入最低匹配或使用相关子查询来实现此目的。例如:

select t.*
from t
where t.line = (select min(t2.line)
                from t t2
                where t2.log_id = t.log_id and t2.user_id = t.user_id
               );

row_number()通常更快。