【发布时间】:2021-05-24 19:27:19
【问题描述】:
我有一个带有 python 和 dash/plotly 的仪表板,它接收来自用户的输入,然后在 Google BigQuery 上运行查询。
其中一个查询更新一列 (PAY_FT),使用另一列 (PAY_CLEAN) 和来自仪表板的字符串输入。
DECLARE cpi STRING DEFAULT "C";
UPDATE `xx.yy.zz` t
SET
PAY_FT = s.PAY_FT
FROM
(
SELECT
RN,
CASE
WHEN RN = 1 AND cpi = "S" AND PAY_SHALE_COR = "PAY" THEN 1
WHEN RN = 1 AND cpi = "C" AND PAY_CLEAN = "PAY" THEN 1
WHEN RN = 1 THEN 0
WHEN RN > 1 AND cpi = "S" AND PAY_SHALE_COR = "PAY" THEN 0.2 + (LAG(PAY_FT, 1) OVER(ORDER BY RN))
WHEN RN > 1 AND cpi = "C" AND PAY_CLEAN = "PAY" THEN 0.2 + (LAG(PAY_FT, 1) OVER(ORDER BY RN))
ELSE (LAG(PAY_FT, 1) OVER(ORDER BY RN))
END
AS PAY_FT
FROM
`xx.yy.zz`
WHERE
DEPTH_M IS NOT NULL
)
s
WHERE
t.RN = s.RN
但它没有按预期工作。此查询返回以下内容:
它一直工作到 DEPTH_M = 102.2,但之后它不会从上一行返回 0.4。因此,例如,如果我们在 DEPTH_M = 103.2 中有一个“PAY”,则在 103.0 之前应该返回 0.4,在 103.2 中应该返回 0.6。
我该如何解决?
这是我的数据示例:SAMPLE.csv
我想要的输出应该是:
| DEPTH_M | PAY_CLEAN | PAY_FT |
|---|---|---|
| 101.2 | PAY | 0.2 |
| 101.4 | PAY | 0.4 |
| 101.6 | - | 0.4 |
| 101.8 | - | 0.4 |
| 102.0 | - | 0.4 |
| 102.2 | - | 0.4 |
| 102.4 | - | 0.4 |
| 102.6 | - | 0.4 |
| 102.8 | - | 0.4 |
| 103.0 | - | 0.4 |
| 103.2 | - | 0.4 |
| 103.4 | - | 0.4 |
假设我们在另一行得到另一个 PAY,输出应该是:
| DEPTH_M | PAY_CLEAN | PAY_FT |
|---|---|---|
| 101.2 | PAY | 0.2 |
| 101.4 | PAY | 0.4 |
| 101.6 | - | 0.4 |
| 101.8 | - | 0.4 |
| 102.0 | - | 0.4 |
| 102.2 | - | 0.4 |
| 102.4 | - | 0.4 |
| 102.6 | - | 0.4 |
| 102.8 | - | 0.4 |
| 103.0 | PAY | 0.6 |
| 103.2 | - | 0.6 |
| 103.4 | - | 0.6 |
提前致谢。
【问题讨论】:
-
能否请您发布您的原始表结构和一些示例数据,以便帮助我们找出条件是否是罪魁祸首?
-
@khan 我编辑了我的帖子以包含带有示例数据的 csv。
-
您能否详细说明一下,并指定预期的输出?我仍然不确定您需要在这里解决什么问题。
-
@daniellidio 向我们展示您想要的输出
-
@daniellidio 等等,PAY_FT 是您正在制作的新栏目还是现有栏目?您的示例数据中有该列,并且您正在创建一个具有相同名称的新列。
标签: sql google-bigquery