GoogleSQL-如果需要,请选择
我正在使用这样的数据集结构 我想排除ReviewRound为“a”的所有记录,如果它们已通过“b”轮审核-如果一组唯一ID具有关联的“b”轮审核,则不应包括“a”轮审核 有些记录没有进入“b”轮。我遇到的问题是由于每个唯一ID都有多个记录 理想情况下,这可以在GoogleBigQuery中完成,如果不是,通过GoogleScripts进行过滤也可能是一种选择 如有任何建议,将不胜感激 如果一组唯一ID具有关联的“b”轮审核,则不应包括“a”轮审核 如果我没有弄错,您可以将其表示为GoogleSQL-如果需要,请选择,sql,google-apps-script,google-bigquery,Sql,Google Apps Script,Google Bigquery,我正在使用这样的数据集结构 我想排除ReviewRound为“a”的所有记录,如果它们已通过“b”轮审核-如果一组唯一ID具有关联的“b”轮审核,则不应包括“a”轮审核 有些记录没有进入“b”轮。我遇到的问题是由于每个唯一ID都有多个记录 理想情况下,这可以在GoogleBigQuery中完成,如果不是,通过GoogleScripts进行过滤也可能是一种选择 如有任何建议,将不胜感激 如果一组唯一ID具有关联的“b”轮审核,则不应包括“a”轮审核 如果我没有弄错,您可以将其表示为not条件,并
not
条件,并使用相关子查询确保,如果当前记录具有ReviewRound='a'
,则没有其他记录具有相同的id
和ReviewRound='b'
select t.*
from mytable t
where not (
t.ReviewRound = 'a'
and exists (
select 1
from mytable t1
and t1.id = t.id and t1.ReviewRound = 'b'
)
)
如果一组唯一ID具有关联的“b”轮审核,则不应包括“a”轮审核
如果我没有弄错,您可以将其表示为not
条件,并使用相关子查询确保,如果当前记录具有ReviewRound='a'
,则没有其他记录具有相同的id
和ReviewRound='b'
select t.*
from mytable t
where not (
t.ReviewRound = 'a'
and exists (
select 1
from mytable t1
and t1.id = t.id and t1.ReviewRound = 'b'
)
)
您也可以使用窗口功能执行此操作:
select t.* except (num_bs)
from (select t.*,
countif(reviewround = 'b') over (partition by id) as num_bs
from t
) t
where num_bs = 0 or reviewround = 'b';
您也可以使用窗口功能执行此操作:
select t.* except (num_bs)
from (select t.*,
countif(reviewround = 'b') over (partition by id) as num_bs
from t
) t
where num_bs = 0 or reviewround = 'b';
通过使用窗口函数,您可以使用此查询解决它
SELECT ID, Score
FROM (
SELECT *,
MAX(CASE WHEN ReviewRound = 'b' THEN 1 ELSE 0 END) OVER (partition by ID) as has_b
FROM mytable
) t
WHERE has_b = 0
通过使用窗口函数,您可以使用此查询解决它
SELECT ID, Score
FROM (
SELECT *,
MAX(CASE WHEN ReviewRound = 'b' THEN 1 ELSE 0 END) OVER (partition by ID) as has_b
FROM mytable
) t
WHERE has_b = 0