BigQuery - 选择 id 组内具有条件的行

问题描述 投票:0回答:1

我在 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(),但我找不到解决方案。

google-bigquery conditional-statements
1个回答
0
投票

对于您的要求,您可以考虑以下查询:

代码:

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:

image

© www.soinside.com 2019 - 2024. All rights reserved.