SQL使用两列筛选记录



我在Teradata中有一个这样的表。客户端可以在系统"A"或"b"中或在两者中都有记录。还有一个值可以为null。

值<1>
客户端 系统
A A
B B
C a 2
C b
D a
D b 3
E a 4
E b 5
F a
F b

您可以使用qualityrow_number():

select t.*
from t
qualify row_number(partition by client
order by (case when value is not null then 1 else 2 end),
system
) = 1;

Qualify是一个子句,用于筛选窗口函数的结果。另一种选择(在其他数据库中(通常是子查询或CTE。

关键思想是将您的条件表示为行的排序。订单为:

  • 将非NULL值放在第一位
  • system排序,因此如果有重复,则a优先

最新更新