我在 BigQuery 中有一个这样的表:
ID CODE
aa code-r
aa code-k
aa code-s
aa code-special-r
aa code-special-k
aa code-t
bb code-r
bb code-k
bb code-special-k
bb code-t
cc code-r
cc code-k
cc code-t
我需要从每个 ID 中选择存在特殊代码的行,否则采用普通代码。所以结果应该是:
ID CODE
aa code-s
aa code-special-r
aa code-special-k
aa code-t
bb code-r
bb code-special-k
bb code-t
cc code-r
cc code-k
cc code-t
我正在考虑以某种方式使用 rew_number(),但我找不到解决方案。
对于您的要求,您可以考虑以下查询:
代码:
select ID,CODE from (select \*,rank() over(partition by ID,lastcode order by findlast desc) as r from (SELECT \*,RIGHT(code,1) as lastcode, CASE when code LIKE "%special%" THEN (select RIGHT(code,1)) ELSE NULL END AS findlast FROM t1) ) where r=1 order by ID;
RESULT: