dev*_*747 0 sql sql-server-2008-r2
CI有一个简单的方法,我可以找到第一次出现在列中具有特定值的行?例如,假设我有这两个表
Alphabet
A
B
C
D
Alphabet Usage
A Apple
B Bat
D Dog
A Amateur
A Arsenal
C Cat
B Ball
D Drum
Run Code Online (Sandbox Code Playgroud)
在第一个表中选择所有内容以及在第二个表中首次使用它的简单方法是什么?
预期产出:
Alphabet Usage
A Apple
B Bat
C Cat
D Dog
Run Code Online (Sandbox Code Playgroud)
你应该可以申请row_number().但是,在使用时row_number,需要提供订单.
第一个示例使用了order by usage但问题是表中的第一个顺序不是第一个,它将按字母顺序排列:
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
Run Code Online (Sandbox Code Playgroud)
如果您没有数字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
Run Code Online (Sandbox Code Playgroud)
正如@Aaron在评论中指出的那样,使用此方法无法保证该顺序,并且行为可能会发生变化.
理想情况下,您应该使用排序类型的列来区分数据的第一次出现,即datetime,id等.由于表中的数据没有顺序,您可以使用 order by
| 归档时间: |
|
| 查看次数: |
2313 次 |
| 最近记录: |