【发布时间】:2021-05-02 11:35:38
【问题描述】:
我在 BigQuery 中有一个如下所示的表:
sequence 字段是重复的RECORD。我想每个stepName 选择一行,但是如果每个步骤名称有多行,我想选择sequence.step.elapsedSeconds 和sequence.step.elapsedMinutes 不为空的行,否则选择其中的行这些列是空的。
如上图所示,我想选择行号。 2、4 和 5。我计算出 ROW_NUMBER 是这样的:ROW_NUMBER() OVER(PARTITION BY step.stepName) AS RowNum。
这是我目前尝试过滤掉不需要的行的查询:
WITH DistinctRows AS
(
select timestamp,
ARRAY (
SELECT
STRUCT(
STRUCT(
step.elapsedSeconds,
step.elapsedMinutes,
) as step
)
FROM
UNNEST(source_table.sequence) AS sequence
) AS sequence,
ROW_NUMBER() OVER(PARTITION BY step.stepName) AS RowNum
from source_table,
unnest(sequence) as previousCalls
order by timestamp asc
)
SELECT *
FROM DistinctRows,
unnest(sequence) as sequence
where (rowNum = 1 and (step.elapsedSeconds is null and step.elapsedMinutes is null)
or (RowNum > 1 and step.elapsedSeconds is not null and step.elapsedSeconds is not null)
order by timestamp asc
我需要帮助来弄清楚如何过滤掉像 no 这样的行。 1 和 3,希望能得到一些帮助。
提前致谢。
【问题讨论】:
-
我很困惑。 行 是什么样的?
stepname是序列的一部分吗? -
另外,你可以有多个不为空的 stepN 吗?你想要所有这些,还是只想要以秒或某事物为单位的最大的?
-
你能给我们看看原始表吗?您向我们展示了横向连接的结果,我有一种不需要的感觉:)
-
我已经用@GordonLinoff、@Martin Weitzmann 更新了查询。
stepName是sequence的子字段,是重复记录。我希望每个stepName只显示一行。
标签: sql google-bigquery