【发布时间】:2021-01-28 18:29:35
【问题描述】:
免责声明:如果这个问题的表达方式过于复杂,我深表歉意。我已经尽力了。 我对如何解决这个问题有一个非常粗略的想法,所以我在下面附加了代码,尽管它无助于解决我的问题。谢谢。
我有一张这样的桌子:
WITH table1 AS (
SELECT '2020-12-01 00:00:06 UTC' Datetime, NULL Column1, 'A0' Column2, 'x' Column3 UNION ALL
SELECT '2020-12-01 00:00:16 UTC', 'A1', 'A0', 'x' UNION ALL
SELECT '2020-12-01 00:00:26 UTC', 'A1', 'A1', 'y' UNION ALL
SELECT '2020-12-01 00:00:36 UTC', 'A1', 'A1', 'y' UNION ALL
SELECT '2020-12-01 00:00:46 UTC', 'A1', 'A2', 'z' UNION ALL
SELECT '2020-12-01 00:00:56 UTC', 'A1', 'A2', 'z' UNION ALL
SELECT '2020-12-01 00:00:66 UTC', NULL, 'A2', 'z' UNION ALL
SELECT '2020-12-01 00:01:06 UTC', NULL, 'A2', 'z'
)
select * from table1
我想创建一个新列并将 Column3 中的每个值附加到 Column1 的整个长度,如果条件 (Column1 = Column2) 至少满足一次,则 NULLS 是边界。
详细解释: 我想首先检查条件 Column1 = Column2;如果这是真的,我想检查 Column3 中的值。就我而言,这是'y'。 满足条件时,我想做 LAG 和 LEAD 直到 Column1 中的 NULL,然后将 Column1 中 A1 的整个长度的“y”应用于新列 Column4。如果一开始不满足条件 Column1 = Column2,则 Column4 中应该有 NULL。
然后输出表将是:
我尝试使用下面的代码,但不幸的是它唯一做的就是一团糟。
select *,
case when lag(Column1) over (partition by Column1 = Column2 order by DateTime) is null
then Column3
when lead(Column1) over (partition by Column1 = Column2 order by DateTime) is null
then Column3
else NULL
end as Column4
from XX.YY.ZZ
order by datetime
【问题讨论】:
标签: google-bigquery