Sql BigQuery:检查其中一个重复ID的值,并将所有重复ID存储在新列中
我的数据有一个ID,然后是通过具有相同ID的行链接的不同数量的状态。我想创建一个新列,如果给定ID曾经是一个状态,则显示TRUE/FALSE,并将此信息附加到具有关联ID的所有行 初始数据示例:Sql BigQuery:检查其中一个重复ID的值,并将所有重复ID存储在新列中,sql,google-bigquery,Sql,Google Bigquery,我的数据有一个ID,然后是通过具有相同ID的行链接的不同数量的状态。我想创建一个新列,如果给定ID曾经是一个状态,则显示TRUE/FALSE,并将此信息附加到具有关联ID的所有行 初始数据示例: “' |身份|身份| ''''''''''''''''' |1 |国家1| |1 |国家2| |1 |国家2| |1 |状态3| |2 |国家2| |2 |状态3| |3 |国家2| |3 |状态3| |3 |状态1| | ...| ... |只需使用窗口功能: select t.*,
“'
|身份|身份|
'''''''''''''''''
|1 |国家1|
|1 |国家2|
|1 |国家2|
|1 |状态3|
|2 |国家2|
|2 |状态3|
|3 |国家2|
|3 |状态3|
|3 |状态1|
| ...| ... |代码>只需使用窗口功能:
select t.*,
(countif(state = 'state1') over (partition by id) > 0) as flag
from t;
下面是BigQuery标准SQL
#standardSQL
SELECT *,
MAX(status = 'state1') OVER(PARTITION BY ID) AS is_ever_state1
FROM table
如果要应用于问题中的样本数据,则输出为
Row ID status is_ever_state1
1 1 state1 true
2 1 state2 true
3 1 state2 true
4 1 state3 true
5 2 state2 false
6 2 state3 false
7 3 state2 true
8 3 state3 true
9 3 state1 true