繁体   English   中英

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

[英]T-SQL Find first occurrence of unique combinations

我有一张看起来像这样的桌子

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

有任何想法吗? 我找到的解决方案通常假定我正在尝试加入该表,并且希望加入最低匹配项。 但这是我的主要表格。

谢谢!

这种优先级排序可以很好地利用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()通常更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM