我有一张看起来像这样的表
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
有什么想法吗?我发现的解决方案通常假设我正在尝试加入到表中,并且我想加入最低匹配。但这是我的主要表格。
谢谢!
答案 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()
通常更快。