在 BigQuery SQL 中:在满足日期约束时检查和更新表列值

Posted

技术标签:

【中文标题】在 BigQuery SQL 中:在满足日期约束时检查和更新表列值【英文标题】:In BigQuery SQL: To check and update table column value on satisfying the date constraints 【发布时间】:2021-06-07 12:59:51 【问题描述】:

有一个结构如下的 bigquery 表:

Store       Product     Weekbegindate   Weekenddate     Datevalidfrom   Datevalidto     IP      Unit
11          AA          2021-02-24      2021-03-02      null            null            null    7.7
11          BB          2021-02-10      2021-02-16      2021-04-17      2021-12-01      44      59.9
11          CC          2021-06-09      2021-06-15      2021-06-03      2021-06-24      03      6.5

我需要在满足两个条件时更新“Unit”列, 1. 检查“IP”是否不为空,并验证从“Weekbegindate”开始并以“Weekenddate”结尾的日期 - 位于日期范围“Datevalidfrom”和“Datevalidto”之间 2. 如果“是”,则将“Unit”列更新为值“0”,否则保留相同的值。

预期输出:

Store       Product     Weekbegindate   Weekenddate     Datevalidfrom   Datevalidto     IP      Unit
11          AA          2021-02-24      2021-03-02      null            null            null    7.7
11          BB          2021-02-10      2021-02-16      2021-04-17      2021-12-01      44      59.9
11          CC          2021-06-09      2021-06-15      2021-06-03      2021-06-24      03      0

尝试查询:

SELECT t1.*,
      CASE WHEN (tt1.Store AND tt1.Product AND tt1.Weekbegindate AND tt1.Weekenddate) IS NOT NULL
      THEN 0 ELSE t1.Unit END as ip_Unit
FROM table1 t1
LEFT JOIN
    (SELECT * FROM table1 
      where IP is not null 
        and Datevalidfrom between Weekbegindate and Weekenddate
        or Datevalidto between Weekbegindate and Weekenddate
        or Weekbegindate between Datevalidfrom and Datevalidto
        or Weekenddate between Datevalidfrom and Datevalidto) tt1 
ON t1.Store = tt1.Store AND t1.Product = tt1.Product AND t1.Weekbegindate = tt1.Weekbegindate AND t1.Weekenddate = tt1.Weekenddate

但这不锻炼。 任何帮助将不胜感激。提前致谢!

【问题讨论】:

【参考方案1】:

这听起来像是case 表达式:

select t1.* (except unit),
       (case when ip is not null and
                  Weekbegindate >= Datevalidfrom and
                  Weekenddate <= Datevalidto
             then 0 else unit
        end) as unit
from t1;

这个逻辑也可以合并到update中。

【讨论】:

哇!这就像一个魅力。非常感谢您的帮助!

以上是关于在 BigQuery SQL 中:在满足日期约束时检查和更新表列值的主要内容,如果未能解决你的问题,请参考以下文章

CHECK约束

BigQuery:无效日期错误

存在 UIToolbarContentView 时无法同时满足约束

标准 SQL (BigQuery) 中整数 YYYYMMDD 的日期

满足其他列中的条件后,如何在 SQL BigQuery 中重置运行总计?

如何在 BigQuery 的标准 SQL 中解析具有不同日期字符串的列中的值