你应该可以申请row_number()
。但是,使用时row_number
需要提供订单。
第一个示例使用 order by,usage
但问题是它不会按表中 first 的顺序,而是按字母顺序:
select alphabet, usage
from
(
select t1.alphabet,
t2.usage,
row_number() over(partition by t1.alphabet order by t2.usage) rn
from table1 t1
inner join table2 t2
on t1.alphabet = t2.alphabet
) src
where rn =1
请参阅SQL Fiddle with Demo。
如果您没有数字 id 字段来保证第一个输入的顺序。您也许可以使用:
select alphabet, usage
from
(
select t1.alphabet,
t2.usage,
row_number() over(partition by t1.alphabet order by (select 1)) rn
from table1 t1
inner join table2 t2
on t1.alphabet = t2.alphabet
) src
where rn =1
请参阅SQL Fiddle with Demo。
正如@Aaron 在评论中指出的那样,使用此方法不能保证该顺序,并且行为可能会改变。
理想情况下,您应该有排序类型的列,可以让您区分数据的第一次出现,即日期时间、id 等。由于表中的数据没有顺序,您可以使用以下方式应用顺序order by